If语句中的ASP.Net Repeater Eval

Rob*_*bie 3 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>
Run Code Online (Sandbox Code Playgroud)

Kna*_*ģis 8

ItemTemplate在里面写下这样的标记:

<asp:Panel runat="server" Visible='<%# Eval("imageUrl") != null %>'>
    <asp:Image runat="server" ImageUrl='<%# Eval("imageUrl") %>'/>
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)

基本上你不能将代码<%与数据绑定结构混合在一起<%#.

我的建议是在CodeBehind中添加以下属性:

    protected YourClass DataItem
    {
        get
        {
            return (YourClass)this.Page.GetDataItem();
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后编写标记而不Eval():

    <asp:Image runat="server" ImageUrl='<%# DataItem.imageUrl %>'/>
Run Code Online (Sandbox Code Playgroud)