【问题标题】:Complex binding expression with IF on asp.net在 asp.net 上使用 IF 的复杂绑定表达式
【发布时间】:2014-09-26 15:49:16
【问题描述】:

我有一个带有列的中继器,我需要使用以下表达式,但不确定语法。

如果 value="DispForm.aspx" 那么 显示“无文件” 别的 显示真正的价值。

我尝试在一行中使用所有表达式,但不确定我在这里缺少什么

 <a href=" <%# DataBinder.Eval(Container.DataItem, "Path") %>">
                         <%#
                             if (DataBinder.Eval(Container.DataItem, "FileName") == "DispForm.aspx")
                             {
                                 "No document";
                             }
                             else
                             {
                                 DataBinder.Eval(Container.DataItem, "FileName");}%>
                     </a>

错误:

http://screencast.com/t/ZERZjzZxST

【问题讨论】:

    标签: c# html asp.net webforms


    【解决方案1】:

    使用 ItemDataBound 事件会简单得多,添加一个 id 和 runat="server" 到锚元素,然后您可以使用 e.Item.FindControl("anchorname") 获取 htmlanchor 元素。然后,您可以在代码隐藏中设置它的文本、href、可见性等,这比尝试让一些更困难的数据绑定逻辑有效地工作要容易得多。

    【讨论】:

    • 我不同意,每行都会触发项目数据绑定,报告值 2000 行。
    • 当然是在每一行上调用。您的 DataBinder.Eval 对每一行以及 ItemTemplate 中的任何标记进行评估。您甚至可能会在性能方面得到提升,因为与内联标记相比,代码隐藏在编译时会得到更好的优化。
    • 也许我在这里遗漏了一些东西,数据表在内存中,而 databinder.eval 只是根据内存中已有的数据列评估表达式。然而,每行都会触发服务器端数据绑定事件,因此它必须为每一行转到服务器,在我看来,databinder.eval 已经在内存中拥有数据表并且应该更快。?
    • 数据表的存储位置无关紧要,因为它始终是内存中的变量。您有一个项目模板,其中正在执行 DataBinder.Eval。它不会运行一次,它必须为数据源中的每个项目运行它。它无法一次性完成,因为 DataBinder.Eval 会在数据源中的每条记录上调用,因为它必须评估每个字段。这就是您将 Container.DataItem 传递给 Eval 方法的原因。该 Container.DataItem 仅表示它绑定到的当前项目。不是一下子。这样做没有性能提升。
    【解决方案2】:

    我自己解决了这个问题:每行都会在服务器端触发项目数据绑定事件,并且此报告返回 2000 行。不是什么好事。

       <a href="<%# DataBinder.Eval(Container.DataItem, "fileNameUrl") %>">
                                 <%# DataBinder.Eval(Container.DataItem, "FileName").ToString() == "DispForm.aspx" ? "No document" : DataBinder.Eval(Container.DataItem, "FileName").ToString() %>
                             </a>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多