3

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

基本上,我有一个由数据库表支持的转发器。在此转发器的 ItemTemplate 中,我有一些 HTML 元素,其中填充了列表中每个项目的属性。很标准的东西。但是,其中一项可能为空。if (blah != null)在这种情况下,对我来说,在有问题的代码周围加上某种逻辑是有意义的。唯一的问题是,当我尝试这样做时,ASP 突然出现在我身上,告诉我不能在<%# %>.

我对大众的问题是:如果你不能在里面使用 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>
4

2 回答 2

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 %>'/>
于 2012-11-14T20:15:34.620 回答
0

您应该为模板中的每个项目生成相同的内容。如果您不需要将它用于特定项目,只需在绑定事件中将其可见性设置为 false。

于 2012-11-14T20:14:53.327 回答