25

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>

上面给出了以下运行时错误:

Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用。

那么如何将一些条件逻辑(如上)放入一个ItemTemplate

4

4 回答 4

37

将控件的“可见”属性绑定到您的条件怎么样?就像是:

<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>
于 2009-07-05T11:06:05.997 回答
8

解决“服务器标签格式不正确”。对于涉及可见性的答案,请从 Visible= 参数中删除引号。

所以会变成:

<tr runat="server" Visible=<%# Eval("DownloadLink") != null ? true : false %>>
于 2013-08-01T23:37:08.397 回答
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控件。

于 2009-07-23T12:02:40.923 回答
2

如果您有 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>
于 2012-04-07T19:20:00.360 回答