我收到以下错误
Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control
但我正在尝试将我的代码编写为ASP.NET REPEATER Control
<%if (Eval("IsBreakPoint") == "1")
{ %>
<tr>
<td>
<asp:Label ID="lblCategory" runat="server" Text='<%#Eval("Category") %>'></asp:Label>
</td>
<td colspan="27">
</td>
</tr>
<%} %>
请帮忙
答案 0 :(得分:11)
<% if %>
语句不支持数据绑定。
对于条件显示,我总是尝试数据绑定到单个服务器控件的Visible
属性。
在像您这样涉及标记块(而不是单个服务器控件)的情况下,我将该块包装在<asp:PlaceHolder>
控件中,如下所示:
<asp:PlaceHolder ID="CategoryPlaceHolder" runat="server" Visible='<%# Eval("IsBreakPoint") == "1") %>'>
<tr>
<td>
<asp:Label ID="lblCategory" runat="server" Text='<%#Eval("Category") %>'></asp:Label>
</td>
<td colspan="27">
</td>
</tr>
</asp:PlaceHolder>
或者,如果您没有真正使用该标签服务器端:
<asp:PlaceHolder ID="CategoryPlaceHolder" runat="server" Visible='<%# Eval("IsBreakPoint") == "1") %>'>
<tr>
<td>
<%# Eval("Category") %>
</td>
<td colspan="27">
</td>
</tr>
</asp:PlaceHolder>
或者更可读:如果您可以为Repeater定义ItemType属性,那么您将在设计时获得强类型和Intellisense(这将是我推荐的方法):
<asp:PlaceHolder ID="CategoryPlaceHolder" runat="server" Visible='<%# Item.IsBreakPoint == "1") %>'>
<tr>
<td>
<%# Item.Category %>
</td>
<td colspan="27">
</td>
</tr>
</asp:PlaceHolder>
当表达式包含双引号时,请注意在Visible
值周围使用单引号。 (啊,因为你已经使用了Label.Text
属性。)
答案 1 :(得分:1)
得到答案......而且有效......
<%#(Eval("IsBreakPoint")) == "1" ? Eval("Category", "<tr bgcolor:#D4FFC4><td colspan='28'><b>{0}</b></td></tr>") : ""%>
答案 2 :(得分:0)
尝试将其更改为<%#DataBinder.Eval(Container.DataItem,"field")%>
答案 3 :(得分:0)
我们不能使用条件方法,如果.. Else switch ... Case in DataList ......
<%if (Eval("IsBreakPoint") == "1")
使用
<tr>
<td>
<asp:Label ID="lblCategory" runat="server" Text='<%#Eval("Category") %>' visible="<# Eval("IsBreakPoint")==1 "></asp:Label>
</td>
<td colspan="27">
</td>
</tr>