所以我一直在寻找这个问题的好答案,但是没有找到任何有用的东西。希望有人可以为我阐明这一点。
基本上,我有一个由数据库表支持的转发器。在这个转发器的ItemTemplate中,我有一些HTML元素,这些元素使用列表中每个项目的属性填充。很标准的东西。但是,其中一个项可能为空。在这种情况下,我可以在违规代码周围加上某种if (blah != null)
逻辑。唯一的问题是,当我试图这样做时,ASP会抛出我,告诉我我不能在<%# %>
内使用if语句。
我向大众提出的问题是:如果你不能在<%# %>
内使用if语句,那么你应该如何根据每个项目的值来做条件逻辑呢?
我知道你可以在转发器中调用自己的方法,但这对我正在尝试做的事情不起作用。
以下是我想要完成的事情,以便更好地说明我的观点。
<asp:Repeater runat="server" ID="repeater">
<ItemTemplate>
<div class="item-wrap">
<% if(Eval("imageUrl") != null) { %>
<div class="plan-img">
<asp:Image runat="server" ImageUrl='<%# Eval("imageUrl") %>'/>
</div>
<% } %>
</div>
</ItemTemplate>
</asp:Repeater>
答案 0 :(得分:8)
在ItemTemplate
内写下这样的标记:
<asp:Panel runat="server" Visible='<%# Eval("imageUrl") != null %>'>
<asp:Image runat="server" ImageUrl='<%# Eval("imageUrl") %>'/>
</asp:Panel>
基本上,您不能将代码<%
与数据绑定结构<%#
混合使用。
我的建议是在CodeBehind中添加以下属性:
protected YourClass DataItem
{
get
{
return (YourClass)this.Page.GetDataItem();
}
}
然后在没有Eval()
的情况下编写标记:
<asp:Image runat="server" ImageUrl='<%# DataItem.imageUrl %>'/>
答案 1 :(得分:0)
您应该为模板中的每个项目生成相同的内容。如果您不需要将它用于特定项目,只需在绑定事件中将其可见性设置为false。