2014-09-24 19 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