我有一个ASP中继器数据绑定到一个DataTable
,并想使用一个代码块渲染通过<% %>
另一个函数做一些验证在项目中。基本上,如果用户不是管理员,我不希望显示第一列。``<% %>里面直放站不工作,评估'<%# %>的顺序`和``<% %>
该函数返回正确,但它总是跳转到if块。我已经在另一个页面上的另一个转发器中尝试了相同的代码,并且它工作正常。任何想法为什么这个人表现得很奇怪?
<asp:Repeater runat="server" ID="batchesRPT">
<HeaderTemplate>
<table>
<tr> <% if(myProject.myUserRole.IsUserInRole("ADMIN"))
{ %>
<th>Select Batch</th> <% } %>
<th>Batch ID</th>
<th>Batch Date</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<% if(GenKFI.myUserRole.IsUserInRole("ADMIN"))
{ %> <td><%#Eval("CheckboxVAL") %></td> <% } %>
<td><%#Eval("BatchID") %></td>
<td><%#Eval("BatchDate") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
UPDATE: 在背后以前的代码中,CheckboxVAL会简单地在非管理员情况下省略(因此它不应该是一个问题,因为如果将保持它越来越评估和演示“ED)。
我发现this link,并认为它可能只是评估数据绑定标签过早。我做了一些步骤,发现它会首先尝试评估<%#Eval("CheckboxVAL") %>
,出错(因为CheckboxVAL对于非管理员不存在),然后返回并评估if语句。我改变了它,所以非管理员的DataTable也包含了CheckboxVAL列,只是将它留空。现在它将评估一个空列,然后返回并检查if语句,而不是渲染第一列。所以现在它工作。
这似乎是一种奇怪的行为。有没有人有解释为什么它在if语句内进行评估,然后再回来检查条件?
你有两个不同的if语句,是故意的吗? –
是的,一个用于标题,另一个用于项目模板 – CDspace