【问题标题】:DataList, Conditional statements in <ItemTemplate>?DataList,<ItemTemplate> 中的条件语句?
【发布时间】:2008-11-05 05:28:24
【问题描述】:

我正在尝试在 ASP.NET 3.5 中执行以下操作。基本上,我将 LINQDataSource 绑定到 DataList。有一个名为“已删除”的属性,如果它是真的,我想显示不同的标记。以下代码抛出错误:

<asp:DataList runat="server">
    <ItemTemplate>
        <% If CBool(Eval("Deleted")) Then%> 
            ...
        <% Else%>
            ...
        <% End If%>
    </ItemTemplate>
</asp:DataList>

这可能吗?如果没有,有什么替代方案?

【问题讨论】:

  • 您真的应该研究@Aydsman 的解决方案,当您的 中有多个控件时,它优于公认的答案
  • @roman 谢谢,两个都是很好的答案。但我认为我更喜欢 RandomNoob 的解决方案来使用 RowDataBound 事件,因为可以完全避免 Eval。

标签: asp.net datalist


【解决方案1】:

我可能会建议保持代码前端精简并通过函数结果写出所需的文本:

<asp:DataList runat="server">
    <ItemTemplate>
         <%# GetText(Container.DataItem) %>
    </ItemTemplate>
</asp:DataList>

还有代码隐藏:

protected static string GetText(object dataItem)
{        
    if (Convert.ToBoolean(DataBinder.Eval(dataItem, "Deleted"))
        return "Deleted";

    return "Not Deleted";
}

希望对你有帮助。

【讨论】:

  • 嗨,本,非常感谢。它很到位,很有帮助。
【解决方案2】:

一种解决方法是使用面板。

<asp:DataList runat="server">
    <ItemTemplate>
        <asp:Panel Visible="<%# Eval("Deleted") %>">
            ...(deleted content here)...
        </asp:Panel>
        <asp:Panel Visible="<%# Not Eval("Deleted") %>">
            ...(other content here)...
        </asp:Panel>
    </ItemTemplate>
</asp:DataList>

【讨论】:

  • 最佳解决方案!!!要解决“服务器标记格式不正确”错误,请将外引号从双引号更改为单引号,如下所示: Visible=''
【解决方案3】:

为什么不直接使用 RowDataBound 事件并检查字段的值呢? RowDatabound 非常适合您希望根据结果集中的值更改网格视图中的数据的情况。

RowDataBound Event from MSDN

【讨论】:

  • 答案应该以是或否和解释开头。然后可能提供替代方案。回答你的问题“为什么?” -“因为我不将后端代码与 UI 逻辑混在一起。因为我希望 UI 逻辑在标记中,而不是在后端代码中。”
  • @EdwardOlamisan 这在 2008 年得到了回答。又是 2008 年。让它沉入一段时间。
【解决方案4】:

也许使用数据列表的 ItemDataBound 事件。对于 gridview,它的 rowdatabound 事件非常适合根据结果集中的其他值更改值的显示。 ItemDataBound event

所以基本上在 itemdatabound 上你可以玩弄你的条件句。同样,这是一个有根据的猜测,因为我通常使用 gridview 上的 RowDataBound 事件来完成此操作。

【讨论】:

  • 我同意有根据的猜测,ItemDataBound 事件的链接很好地解释了它。 Ben Griswold 的路线也可以使用;但是,我发现挂钩到前面提到的 DataList 的 ItemDataBound 事件更简洁、更灵活。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多