ASP.Net: Conditional Logic in a ListView's ItemTemplate

Andreas Grech picture Andreas Grech · Jul 5, 2009 · Viewed 36.1k times · Source

I want to show certain parts of an ItemTemplate based according to whether a bound field is null. Take for example the following code:

(Code such as LayoutTemplate have been removed for brevity)

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

The above gives the following run-time error:

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

So how can put some conditional logic (like the above) in an ItemTemplate ?

Answer

Neil Fenwick picture Neil Fenwick · Jul 5, 2009

What about binding the "Visible" property of a control to your condition? Something like:

<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>