我想根据绑定字段是否为空来显示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
?
答案 0 :(得分:36)
如何将控件的“可见”属性绑定到您的状态?类似的东西:
<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>
答案 1 :(得分:8)
解决&#34;服务器标签格式不正确。&#34;对于涉及可见性的答案,请从Visible =参数中删除引号。
所以它会变成:
<tr runat="server" Visible=<%# Eval("DownloadLink") != null ? true : false %>>
答案 2 :(得分: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
控件中无效。
答案 3 :(得分: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>