在Visible=false
下有一个嵌套控件,为什么ASP.NET会尝试编译它?
Control.Visible Property documentation说:
如果未呈现容器控件,则包含它包含的任何控件 不会被渲染
我的CodeBehind:
public MyClass myVariable = null;
我的观看代码是:
<asp:panel runat="server" Visible="false">
<img id="imgNotConfirmedPhoto" src="<%# myVariable.Whatever %>" />
</asp:panel>
它抛出异常:
对象引用未设置为对象的实例
尝试编译myVariable.Whatever
时。如果容器具有src
?
Visible=false
答案 0 :(得分:2)
正如您在MSDN: ASP.NET Page Life Cycle Overview中看到的那样,整个页面将在呈现之前很久就被解析和加载。
这包括渲染后不可见的控件(例如,当它们或它们的父控件具有Visible = false
时)。
因此,无论是否呈现控件,都将对其进行解析和加载,并对其属性进行评估,从而导致您看到的异常。
答案 1 :(得分:-1)
因为您已在img源中设置了服务器标记。服务器标签不是特定于元素的,因此无论您是否设置VISIBLE="FALSE"
属性,您的服务器标签都会呈现,如果它们没有找到该元素,则会发生异常......
您可以选择两个选项:
在css中使用display:none
<asp:panel runat="server" style="display:none;">
或者从后面的代码设置图像源,这样如果面板可见= false,它将不会被渲染。