在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。
这样做的最佳方式是什么?
答案 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>
中还有其他选项