我的ASP.NET网站发生了什么,导致MasterPage控件背后的代码出现NullReferenceException?

时间:2012-05-10 22:10:39

标签: asp.net master-pages nullreferenceexception pageload app-offline.htm

我有最奇怪的问题!我有一个ASP.NET网站应用程序(幸运的是尚未生效)。昨天和之前的每天,我可以毫无错误地运行应用程序。昨晚我把电脑关掉的时候工作正常。当我今天运行应用程序时,我收到一条奇怪的消息,告诉我我的网站处于脱机状态,我应该从我的根目录中删除app_offline.htm页面,使其重新联机。

我之前从未见过这个消息或页面,所以我在网上搜索发现显然SQL Server可以暂时将它放在那里,而它正忙于停止任何更多的传入请求(或类似的东西)。它的正确用途是在上升或进行维护时停止发送到您站点的请求。我按照建议继续删除它。我清理并构建了解决方案,然后尝试运行它。它不再运行。

现在,我的MasterPage代码中出现错误,我通常会访问MasterPage事件处理程序中Page_Load的控件(如下所示)。

protected void Page_Load(object sender, EventArgs e)
{
    breadCrumb.BreadCrumbs = BreadCrumbs;
    header.MenuItems = MenuItems;
    footer.Footers = Footers;
    head.Controls.Add(CreateCssLink("~/Stylesheets/main.css", "screen"));
    head.Controls.Add(CreateJavaScriptLink("~/Scripts/site.js"));
    if (Context.Session != null && Session["layout"] == null) Session["layout"] = "single";
    if (!ArePreferencesVisible) preferences.Visible = false;
}

我想在此清楚...此代码中没有错误。 MasterPage中有正确命名的元素,与此代码中的元素相对应。它一直按预期工作到今天,我没有更改任何代码,因为它是最后一次工作。我现在在第一行得到NullReferenceException,因为breadCrumb元素是null。实际上,此处引用的页面中的所有元素都是null

通常,在Page_Load事件被引发时,页面元素已经初始化。是什么导致这种情况停止发生?

我已经仔细检查过MasterPage及其代码隐藏文件仍然是连接的,它们是。我也尝试将此代码移动到Page_LoadComplete事件处理程序,但即使在该阶段,控件仍未初始化。我不应该真的改变代码,因为它之前工作得很好。

我也注释掉了这段代码并且网站运行了,虽然没有任何风格。有趣的是,当我将原始代码返回到事件处理程序并刷新页面时,它实际上再次像以前一样工作。我成功加载了许多不同的页面,我认为它已经修复了,所以我重新启动了应用程序,然后再次出现同样的错误。无需任何清理,构建,更改解决方案配置或重新启动应用程序和Visual Studio都会产生任何差异。

我不确定app_offline.htm是否是红鲱鱼,但我之前从未见过它,所以它可能会以某种方式连接起来。根据我的阅读,似乎只是删除它会导致服务器自动重启应用程序域,所以我看不到连接。

我真的希望有人之前遇到过这种奇怪的情况,因为我完全没有想法,在修复之前我无法运行我的网站。

1 个答案:

答案 0 :(得分:1)

好的,所以我终于找到了问题所在。我几天前有一个网站的早期备份,所以我加载了它,虽然错过了最近几天的工作,但它确实有效。我将最新的项目代码复制到Visual Studio>在Visual Studio中保留旧代码的Projects文件夹>网站文件夹。我加载了解决方案,它再次运行良好。

我基本上比较了网站文件,依次更新每个文件并定期运行应用程序。最终,应用程序停止工作。我更新的最后一个文件是MasterPage文件,该文件扩展了有问题的MasterPage

我所做的是在Page_Load中注释掉一个空的MasterPage事件处理程序。我不明白为什么会导致这个问题,因此任何解释这些问题的评论都会有所帮助和赞赏。

这个MasterPage仅用于主页和其他几个,所以这解释了为什么我在改变它的那天晚上没遇到问题。 (我没有看到任何在进行更改后使用MasterPage的页面)。我希望我拥有,因为那时追踪会更容易,但这就是生活。

所以我替换了所有最新的代码,再次在Page_Load中添加了空的MasterPage事件处理程序,最后,一切都恢复了。