在ASP.net中处理条件PlaceHolder的正确方法

问题描述

|| 我仍然习惯于ASP.net WebForms处理事情的方式,但这仍然让我感到困惑。在某些情况下,如果对象为null,并且标记应包含该对象的值,则应该显示标记一个非常简单的例子:
<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.
有没有一种方法可以在没有一百万英镑2的情况下进行处理?     

解决方法

设置占位符服务器端的可见性(即在后面的代码中) 例:
this.placeholdername.Visible = true;

if ( myObject == null ) 
{
    this.placeholdername.Visible = false; 
}
    ,您也可以通过使用内联条件来实现。
<%if (myObject != null) { %>
    //Control here
<% } %>
    ,.Net仍将解析子控件,而不管父控件的可见性如何。因此,这是预期的。 您当然可以使用文字,也可以简单地确保已创建对象,但是可以使用开关来设置是否显示该对象。 另一种方法是使用转发器并将该转发器数据绑定到您的对象。如果对象为空,则转发器不会创建它的子对象...     ,这可能有效:
<asp:PlaceHolder runat=\"server\">    
    <span runat=\"server\" Visible=\'<%# myObject != null %>\'><%= myObject.Property %></span>
</asp:PlaceHolder>