Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.net中处理条件占位符的正确方法_Asp.net_Webforms - Fatal编程技术网

ASP.net中处理条件占位符的正确方法

ASP.net中处理条件占位符的正确方法,asp.net,webforms,Asp.net,Webforms,我仍然习惯于ASP.NETWebForms处理事情的方式,但这一点仍然让我感到困惑。在某些情况下,如果对象为null,则应该显示标记,并且该标记应该包含来自该对象的值 一个非常简单的例子: <asp:PlaceHolder runat="server" Visible='<%# myObject != null %>'> <span><%= myObject.Property %></span> </asp:PlaceHo

我仍然习惯于ASP.NETWebForms处理事情的方式,但这一点仍然让我感到困惑。在某些情况下,如果对象为null,则应该显示标记,并且该标记应该包含来自该对象的值

一个非常简单的例子:

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

问题是ASP.net似乎会解析占位符的内容,而不管其可见性如何。以上代码以错误结尾:

对象引用未设置为对象的实例。


有没有一种方法可以在不占用一百万的情况下处理此问题?

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

例如:

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仍将解析子控件,而不管父控件的可见性如何。所以这是意料之中的

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


另一种方法是使用中继器并将中继器数据绑定到对象。如果对象为null,那么中继器将不会创建它的子对象…

您应该尽可能避免使用内联脚本标记
。在您的代码中,您可以设置该控件的可见性。@Muffindman这是有争议的。正确使用简单的内联脚本可以产生更多的声明性标记。