2014-09-24 87 views
0

我有一个需要具有以下表达式但不确定语法的列的转发器。在asp.net上使用IF进行复杂绑定表达式

如果value = “DispForm.aspx” 然后 显示 “无文件” 否则 显示了真正的价值。

我试图用一切expresion在同一行,但不知道我在这里缺少

<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

回答

0

我解决了它我自己像这样:项目数据绑定事件将在每一行的服务器端触发,并且此报告返回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> 
0

这将是更易于使用ItemDataBound事件,为anchor元素添加一个id和runat =“server”,然后可以使用e.Item.FindControl(“anchorname”)来获取htmlanchor元素。然后,您可以在代码隐藏中设置它的文本,href,可见性等,这比试图让一些更难的数据绑定逻辑有效工作要容易得多。

+0

我不同意,项目数据绑定是针对每行触发的,报表值2000行。 – 2014-09-26 07:49:51

+0

当然它在每一行都被调用。您的DataBinder.Eval将在每行以及ItemTemplate中的任何标记上进行评估。您甚至可能会获得提升性能的方式,因为与内联标记相比,在编译时,代码隐藏会稍微更优化。 – 2014-09-26 12:31:43

+0

也许我在这里丢失了一些东西,数据表在内存中,而databinder.eval只是基于已经在内存中的数据列计算表达式。但是,每一行都会触发一次服务器端数据绑定事件,因此它必须到每一行的服务器端,我认为databinder.eval已经在内存中具有数据表,并且应该更快。 – 2014-09-26 16:33:00