ASP.NET Repeater Eval

时间:2010-09-28 17:36:01

标签: asp.net

我正在尝试在.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())只能在数据绑定控件的上下文中使用。

怎么了?有什么想法吗?

2 个答案:

答案 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) { %>