【问题标题】:ASP.NET Repeater EvalASP.NET 中继器评估
【发布时间】:2011-04-18 10:42:51
【问题描述】:

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

怎么了?有什么想法吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我遇到了类似的问题,以下代码对我有用:

    <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>
    

    更多的cmets:

    请注意,单引号用于定义asp:placeholder 的值Visible 属性。我也尝试了双引号,但它们不起作用。

    任何时候你想获得一些可选显示的 HTML,你应该使用一个控件来显示/隐藏它。 asp:placeholder 可以很好地达到这个目的。永远不要这样做&lt;% if(..) { %&gt; - 这是邪恶的。

    &lt;%# ... %&gt; 用于计算或显示转发器内的表达式。这些表达式可以显示为 HTML 或作为服务器端控件的属性传递。你不能在里面使用if

    【讨论】:

      【解决方案2】:

      我认为外壳&lt;%# ..Eval...%&gt;需要有一个#标志

      或尝试完整的 Eval 版本

      <%# if (Convert.ToInt32(DataBinder.Eval(Container.DataItem, "int_tipo"))
                                                                          == 1) { %>
      

      【讨论】:

      • if can't be used inside &lt;%# ... %&gt; 这个答案是错误的。人们投票支持它的原因对我来说是个谜......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2013-05-01
      • 2011-03-18
      相关资源
      最近更新 更多