关于asp.net:为什么我的Web控件为空?

关于asp.net:为什么我的Web控件为空?

Why is my web control null?

我在asp.net中有一个使用母版页的网站。在此母版页中,我具有一个多视图控件,该控件的一个视图具有该内容页的所有内容,而一个视图具有母版页的一些本地内容,其中显示了来自所有内容页的错误消息。

在此错误视图中,我有一个显示错误消息的asp.net Label控件。通常,标签可以正常工作,但是在某些情况下,标签为null,这将导致NullReferenceException。现在,我已经通过在使用标签之前检查标签是否为空来处理这种情况,但是我的问题仍然是:

为什么此标签为空?在什么情况下会产生这种情况?

编辑:在母版页中,我有一个称为SetErrorText的方法,该方法采用字符串并设置标签。我正在从内容页面的Page_Load方法中调用此方法,该方法通常可以正常工作。除了两种情况(到目前为止,我已经发现)之外,标签都已初始化,并且没有任何两种方法可以将这两种情况与所有有效的情况区分开。

此外,母版页中的所有其他控件都已初始化,例如容纳标签的View控件。

当内容页面的Page_Load滚动时,应填充母版页。


问题似乎是草率的问题之一。有人忘记删除Visual Studio在主页面具有ContentPlaceHolder控件的所有内容页面上抛出的自动生成的Content-control。

如果内容页面具有Content-control,则放在母版页的ContentPlaceHolder-control中的所有控件都将为null。


您可以从母版页上的哪种方法访问标签?根据页面生命周期的阶段,标签控件可能尚未加载


我有一个非常相似的错误。就我而言,这是由与控件设计器文件有关的.NET编译器异常引起的。即使设计器文件中的控件定义正确,也请删除它,重新生成它并重新生成(确保重新生成,而不只是\\'build \\')。有关如何重新生成设计器文件的信息,请参见此处的最佳答案:

如何强制Visual Studio为aspx / ascx文件重新生成.designer文件?


您可以在创建它之前访问它吗?检查页面生命周期:http://msdn.microsoft.com/zh-cn/library/ms178472.aspx


推荐阅读