【问题标题】:how to conditionally show/hide link in DetailsView ItemTemplate如何有条件地显示/隐藏 DetailsView ItemTemplate 中的链接
【发布时间】:2012-06-14 21:16:49
【问题描述】:

我是 ASP.NET 的新手,我试图弄清楚如果值不是空值或空格,如何仅在 .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>

如果Eval("Phone") 为空或空格,我想有条件地隐藏整个a 标记。我宁愿在标记中做这一切,而不是在代码隐藏中做一些事情。

【问题讨论】:

    标签: c# asp.net detailsview


    【解决方案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>
    

    【讨论】:

    • 不错。很高兴我能提供帮助,即使我的确切代码对您不太适用。
    【解决方案2】:

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

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

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

    【讨论】:

    • Container 应该是什么?那是应该存在的一些现有财产,还是我应该用其他东西代替它?我的DetailsViewIDdvOrg,但尝试执行dvOrg.DataItem("Phone") 时出现错误“需要方法、委托或事件”。
    • Container.DataItem 只要您在像Repeater、FormView、DetailsView 等数据绑定控件中,它就在那里。文档在这里:msdn.microsoft.com/en-us/library/4hx47hfe.aspx
    • Container 似乎不存在,VS 想将一些 Container 类从 System.ComponentModel 导入到 .aspx 中。
    【解决方案3】:

    恐怕您不能在 eval 语句中执行条件 if。相反,只需用函数包装简单的 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”)) %>’>
    

    希望对您有所帮助。

    【讨论】:

    • 我说的是 Eval 而不是 DataBinder.Eval()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2017-05-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多