【问题标题】:Displaying data conditionally within a user control在用户控件内有条件地显示数据
【发布时间】:2010-02-03 02:52:10
【问题描述】:

在 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

最好的方法是什么?

【问题讨论】:

  • 您好,哪个控件包含“Web”值?您可以在代码隐藏中使用 FindControl 方法来获取它的值。
  • @TenaciousImpy:代码在中继器中。 Web 在中继器的数据源中定义。

标签: asp.net user-controls eval


【解决方案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 值。但是,如果这不是问题(安全方面),那么您可以尝试这种方法。

更新 下面的代码sn-p来自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也有替代选项

【讨论】:

  • @TenaciousImpy:这也是个好主意。我只是希望可以做一些内联的事情!
  • @Alex - 这篇文章有两个可行的建议:http://forums.asp.net/p/302270/302270.aspx#302270。此外,感谢互联网存档 :D,此页面有一个内联解决方案 http://web.archive.org/web/20080610160756/http://www.openmymind.net/index.aspx?documentId=8
  • 我尝试了第一个链接,这没问题,但随后使用了标签上第二个链接中的内联选项。这就是我正在寻找的东西。也许您可以将这些链接作为您答案的更新?
【解决方案2】:

嗯,MVC 更适用于页面中的那种类型的逻辑...通常使用 Web 表单,一切都是通过代码隐藏完成的...此外,您是否考虑做类似的事情:

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

还没有具体尝试过这种方法,但我知道三级 (?:) 在这种情况下有效,因此它可以工作似乎是合乎逻辑的......

【讨论】:

  • @Brian:这在技术上可行,但我宁愿什么也不渲染。如果我可以使用 MVC,不幸的是不是一个选项。
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2015-03-19
相关资源
最近更新 更多