我仍然习惯于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>
的情况下处理这个问题?
答案 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>