如何在详细信息视图项模板中有条件地显示/隐藏链接

本文关键字:有条件 显示 链接 隐藏 详细信息 视图 | 更新日期: 2023-09-27 18:37:19

我是 ASP.NET 新手,我正在尝试弄清楚如果值不是 null 或空格,如何在 .aspx 文件中仅显示代码块。 这是我在DetailsView内所拥有的:

<asp:TemplateField HeaderText="Phone">
    <EditItemTemplate>
        <asp:TextBox runat="server" ID="txtPhone" Text='<%# Bind("Phone") %>'></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
        <a href="tel:<%# Eval("Phone") %>">
            <i class="icon-phone"></i>
            <%# Eval("Phone") %>
        </a>
    </ItemTemplate>
</asp:TemplateField>

我想有条件地隐藏整个a标签,如果Eval("Phone")为空或空格。 我宁愿在标记中完成所有这些操作,而不是在代码隐藏中执行某些操作。

如何在详细信息视图项模板中有条件地显示/隐藏链接

大卫的回答为我指明了正确的方向:

<asp:HyperLink runat="server" NavigateUrl='tel:<%# Eval("Phone") %>'
        Visible='<%# !string.IsNullOrWhiteSpace(Eval("Phone").ToString()) %>'>
    <i class="icon-phone"></i>
    <%# Eval("Phone") %>
</asp:HyperLink>

首先,将其更改为 ASP:超链接控件。 html A 标记不像 ASP:超链接控件那样具有方便的 Visible 属性。

然后,您可以以声明方式设置可见性。

<asp:HyperLink runat="Server" NavigateUrl='tel:<%# Eval("Phone") %>' Text='<%# Bind("Phone") %>' Visible = '<%= DataBinder.Eval(Container.DataItem("phone").ToString().Trim() == "" %>' />

恐怕你不能在 eval 语句中执行条件。相反,只需用函数包装简单的评估,但为了处理这种情况,我通常会添加一个名为 NullHandler() 的方法。请考虑下面的函数。

protected string NullHandler()(object gridViewObject)
   {
        if (object.ReferenceEquals(gridViewObject, DBNull.Value))
      {
            return "Empty";
       }
        else
       {
            return gridViewObject.ToString();
      }
    }

然后你可以像下面一样

<asp:Label ID=”phoneLbl” runat=”server” Text=’<%# NullHandler(Eval(“Phone”)) %>’>

希望这有帮助。