我正在尝试在.aspx页面中执行以下代码:
<asp:Repeater ID="rptComentarios" runat="server">
<ItemTemplate>
<% if (Convert.ToInt32(Eval("int_tipo")) == 1)
{ %>
<div class="resp">
<div class="top">
</div>
<div class="cont-resp">
<h3>
<%# Eval("txt_nome") %></h3>
<p>
<%# Eval("txt_comentario") %></p>
</div>
</div>
<% }
else
{%>
<div class="usuario">
<div class="top">
</div>
<div class="cont-usuario">
<h3>
<%# Eval("txt_nome") %></h3>
<p>
<%# Eval("txt_comentario") %></p>
</div>
</div>
<% } %>
</ItemTemplate>
</asp:Repeater>
它在第一行引发运行时异常:
<% if (Convert.ToInt32(Eval("int_tipo")) == 1)
System.InvalidOperationException:数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。
怎么了?有什么想法吗?
答案 0 :(得分:5)
我遇到了类似的问题,以下代码对我有用:
<asp:Repeater ID="rptComentarios" runat="server">
<ItemTemplate>
<asp:PlaceHolder ID="placeholderBlaBlaBla" runat="server" Visible='<%# Convert.ToInt32(Eval("int_tipo")) == 1 %>'>
Your optional HTML
</asp:placeholder>
Other HTML
</ItemTemplate>
</asp:Repeater>
更多评论:
请注意,单引号用于定义Visible
的值asp:placeholder
属性。我也试过双引号,但它们没有用。
任何时候你想要获得一些可选的显示HTML,你应该使用一个控件来显示/隐藏它。 asp:placeholder
可以正常运行。不要做<% if(..) { %>
- 这是邪恶的。
<%# ... %>
用于计算或显示转发器内的表达式。这些表达式可以显示为HTML或作为服务器端控件的属性传递。你不能在里面使用if
。
答案 1 :(得分:0)
我认为封套#
<%# ..Eval...%>
标志
或尝试完整的Eval版本
<%# if (Convert.ToInt32(DataBinder.Eval(Container.DataItem, "int_tipo"))
== 1) { %>