正确的方式来处理ASP.net中的条件PlaceHolder
问题描述:
我仍然习惯ASP.net WebForms处理事情的方式,但这仍然让我感到困惑。在某些情况下,如果某个对象为空,并且该标记应包含该对象的值,则应该显示标记。正确的方式来处理ASP.net中的条件PlaceHolder
一个很简单的例子:
<asp:PlaceHolder runat="server" Visible='<%# myObject != null %>'>
<span><%= myObject.Property %></span>
</asp:PlaceHolder>
的问题是,它似乎不管知名度ASP.net解析占位符的内容。上面的代码与错误结束:
Object reference not set to an instance of an object.
有没有办法来处理这无需百万<asp:Literal>
的?
答
设置占位符服务器端的可见度(即在后面的代码)
例如:
this.placeholdername.Visible = true;
if (myObject == null)
{
this.placeholdername.Visible = false;
}
答
这可能工作:
<asp:PlaceHolder runat="server">
<span runat="server" Visible='<%# myObject != null %>'><%= myObject.Property %></span>
</asp:PlaceHolder>
答
您也可以做到这一点通过使用内联条件。
<%if (myObject != null) { %>
//Control here
<% } %>
答
.net仍将解析子控件,无论父级的可见性如何。所以这是预料之中的。
你当然可以使用文字或只是确保创建一个对象,但也许用一个开关来设置它是否显示。
另一条路线是使用中继器并将中继器绑定到您的对象。如果对象为空,那么中继器不会创建它的子节点...
尽可能避免使用内联脚本标记''。在你的代码后面,你可以设置该控件的可见性。 – 2011-04-13 22:27:23
@TheMuffinMan这是有争议的。正确使用简单的内联脚本可以导致更多的声明性标记。 – 2014-11-28 17:17:21