Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net上带IF的复杂绑定表达式_C#_Html_Asp.net_Webforms - Fatal编程技术网

C# asp.net上带IF的复杂绑定表达式

C# asp.net上带IF的复杂绑定表达式,c#,html,asp.net,webforms,C#,Html,Asp.net,Webforms,我有一个带列的转发器,我需要有下面的表达式,但不确定语法 如果value=DispForm.aspx,则 不显示文件 其他的 显示真正的价值 我试图在一行中使用所有表达式,但不确定我在这里遗漏了什么 <a href=" <%# DataBinder.Eval(Container.DataItem, "Path") %>"> <%# if (DataBinde

我有一个带列的转发器,我需要有下面的表达式,但不确定语法

如果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>
错误:


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

我自己这样解决了这个问题:每行的服务器端都会触发项数据绑定事件,此报告返回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>

我不同意,项目数据绑定是为每一行触发的,报告值为2000行。当然,它是在每一行上调用的。您的DataBinder.Eval将在ItemTemplate中的每一行以及任何标记上进行评估。您甚至可以在性能方面得到提升,因为与内联标记相比,codebehind在编译时的优化效果会稍好一些。也许我在这里遗漏了一些东西,datatable在内存中,databinder.eval只是基于内存中已有的datacolumns计算表达式。如何为每一行触发服务器端数据绑定事件,因此它必须为每一行转到服务器,在我看来,databinder.eval已经将datatable存储在内存中,并且应该更快。datatable存储在哪里并不重要,因为它始终是内存中的一个变量。您有一个itemtemplate,其中正在对其执行DataBinder.Eval。它不会运行一次,它必须为数据源中的每个项目运行它。它无法在DataBinder.Eval调用数据源中的每条记录时执行一次,因为它必须计算每个字段。这就是为什么要将Container.DataItem传递给Eval方法。该Container.DataItem仅表示其绑定到的当前项。不是一下子。这样做不会提高性能。