我有一個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