在用户控件中有条件地显示数据

时间:2010-02-03 02:52:10

标签: asp.net user-controls eval

在ASP.NET用户控件中,我有一行:

<div>Web: <a href="<%# Eval("Web") %>"><%# Eval("Web") %></a></div>

我想更改它,因此只有在Web有值时才会呈现此HTML。

我已尝试在服务器端脚本中包装String.IsNullOrEmpty(Eval("Web") as string)Eval can only be used inside a "binding" tag

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

嗯,MVC对页面中的那种逻辑意味着更多...通常使用Web表单一切都是通过代码隐藏完成的...另外,你会考虑做类似的事情:

<div style='<%# ((Eval("Web") != null) ? "display" : "none") %>'>Web: <a href="<%# Eval("Web") %>"><%# Eval("Web") %></a></div>

没有特别尝试过这种方法,但我知道大学(?:)在这种情况下有效,所以看起来它可以正常工作......

答案 1 :(得分:1)

这是一种解决方法,但您可以在ItemTemplate标记中包含隐藏字段:

<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("web") %>' />

然后,您可以将div的'runat'属性设置为'server',并为div提供ID。

<div id="divWeb" runat="server" visible="false">Web: <a href="<%# Eval("Web") %>"><%# Eval("Web") %></a></div>

在代码隐藏中,检查HiddenField1是否为空。如果它不为空,则设置'divWeb'visible = true

此方法的缺点是用户可以手动更改HiddenField1值。但是,如果这不是问题(明智的话),那么你可以尝试这种方法。

<强>更新 以下代码段来自this site的内联部分:

<asp:Repeater id="collectionRepeater" Runat="server">  
     <ItemTemplate>
      <%# DataBinder.Eval(Container.DataItem, "OwnerId") %> - 
      <asp:literal ID="see" Runat="server" 
         Visible='<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") > 0 %>'>
         see pets
      </asp:Literal>
      <asp:literal ID="nopets" Runat="server" 
        Visible='<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") == 0 %>'>
          no pets
       </asp:Literal>
       <br />
      </ItemTemplate>
    </asp:Repeater>

this thread

中还有其他选项