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

时间:2011-04-13 22:19:29

标签: asp.net webforms

我仍然习惯于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.

有没有办法在没有百万<asp:Literal>的情况下处理这个问题?

4 个答案:

答案 0 :(得分:4)

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

示例:

this.placeholdername.Visible = true;

if ( myObject == null ) 
{
    this.placeholdername.Visible = false; 
}

答案 1 :(得分:4)

您也可以使用内联条件来实现此目的。

<%if (myObject != null) { %>
    //Control here
<% } %>

答案 2 :(得分:1)

.Net仍将解析子控件,无论父级的可见性如何。所以这是预期的。

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

另一种方法是使用转发器并将转发器数据绑定到您的对象。如果对象为null,则转发器不会创建它的子节点......

答案 3 :(得分:0)

这可能有用:

<asp:PlaceHolder runat="server">    
    <span runat="server" Visible='<%# myObject != null %>'><%= myObject.Property %></span>
</asp:PlaceHolder>