如何在DetailsView ItemTemplate中有条件地显示/隐藏链接

时间:2012-06-14 21:16:49

标签: c# asp.net detailsview

我是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")标记。我更愿意在标记中执行此操作,而不是在代码隐藏中执行某些操作。

3 个答案:

答案 0 :(得分:1)

David's answer向我指出了正确的方向:

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如果在eval声明中,我恐怕你不能做条件。相反,只需使用函数包装简单的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”)) %>’>

希望得到这个帮助。