正确的方式来处理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>的?

+1

尽可能避免使用内联脚本标记''。在你的代码后面,你可以设置该控件的可见性。 – 2011-04-13 22:27:23

+0

@TheMuffinMan这是有争议的。正确使用简单的内联脚本可以导致更多的声明性标记。 – 2014-11-28 17:17:21

设置占位符服务器端的可见度(即在后面的代码)

例如:

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仍将解析子控件,无论父级的可见性如何。所以这是预料之中的。

你当然可以使用文字或只是确保创建一个对象,但也许用一个开关来设置它是否显示。

另一条路线是使用中继器并将中继器绑定到您的对象。如果对象为空,那么中继器不会创建它的子节点...