2009-07-05 29 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 %>>