2009-07-05 59 views
23

我想根據綁定字段是否爲空來顯示ItemTemplate的某些部分。採取例如以下代碼:ASP.Net:ListView的ItemTemplate中的條件邏輯

(代碼如LayoutTemplate模板已爲簡潔移除)上面

<asp:ListView ID="MusicList" runat="server"> 
    <ItemTemplate> 
     <tr> 
      <% 
       if (Eval("DownloadLink") != null) 
       { 
      %> 
      <td> 
       <a href="<%#Eval("DownloadLink") %>">Link</a> 
      </td> 
      <% 
       } %> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 

給出了以下的運行時錯誤:

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

所以怎樣才能把一些條件邏輯(如上)放在ItemTemplate

+1

這是東西這是目前推動我有點瘋狂的那種。這在ASP.net MVC中是如此簡單,但在webforms – 2011-05-12 06:16:11

回答

34

如何將控件的「可見」屬性綁定到您的條件?喜歡的東西:

<asp:ListView ID="MusicList" runat="server"> 
    <ItemTemplate> 
    <tr runat="server" Visible='<%# Eval("DownloadLink") != null %>'> 
     <td> 
      <a href='<%#Eval("DownloadLink") %>'>Link</a> 
     </td> 
    </tr> 
    </ItemTemplate> 
</asp:ListView> 
+0

嗯有趣的一點總戲劇......但是有沒有在ItemTemplate注入邏輯塊的某種方式? – 2009-07-05 11:56:39

+2

修改你的答案返回一個布爾,而不是字符串 – 2009-07-05 12:05:29

6

我不建議這是一個很好的方法,但你可以通過捕捉當前項目中OnItemDataBound情況下,將其存儲在一個公共財產或現場解決此問題,然後使用在你的條件邏輯。

例如:

<asp:ListView ID="MusicList" OnItemDataBound="Item_DataBound" runat="server"> 
    <ItemTemplate> 
     <tr> 
      <% 
       if (CurrentItem.DownloadLink != null) 
       { 
      %> 
      <td> 
       <a href="<%#Eval("DownloadLink") %>">Link</a> 
      </td> 
      <% 
       } %> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 

而在服務器端下面的代碼添加到您的代碼隱藏文件:

public MusicItem CurrentItem { get; private set;} 

protected void Item_DataBound(object sender, RepeaterItemEventArgs e) 
{ 
    CurrentItem = (MusicItem) e.Item.DataItem; 
} 

注意,這一招不會在UpdatePanel控制工作。

1

如果你有2個不同的結構,它是根據條件進行渲染,然後用面板

<asp:ListView ID="MusicList" runat="server"> 
    <ItemTemplate> 
     <tr> 
      <asp:Panel ID="DownloadNull" runat="server" Visible="<%# Eval("DownloadLink") == null %>" > 
      <td> Album Description BlaBlaBla <img src="../images/test.gif"> </td> 
      </asp:Panel> 

      <asp:Panel ID="DownloadNotNull" runat="server" Visible="<%# Eval("DownloadLink") != null %>" > 
      <td> Album Description BlaBlaBla <img src="../images/test.gif"> 
       <a href='<%# Eval("DownloadLink")' >Download</a> 
       ..... 
      </td> 
      </asp:Panel> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 
8

要解決「服務器標記的格式不正確。」對於涉及可見性的答案,請從Visible =參數中刪除引號。

因此,這將成爲:

<tr runat="server" Visible=<%# Eval("DownloadLink") != null ? true : false %>>