If语句中的ASP.Net Repeater Eval

时间:2012-11-14 20:09:53

标签: c# asp.net

所以我一直在寻找这个问题的好答案,但是没有找到任何有用的东西。希望有人可以为我阐明这一点。

基本上,我有一个由数据库表支持的转发器。在这个转发器的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>

2 个答案:

答案 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。