Что случилось с моим веб-сайтом ASP.NET, вызвав исключение NullReferenceException в коде позади элементов управления из MasterPage?
У меня самая странная проблема! У меня есть приложение на веб-сайте 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 ответ
Итак, я наконец-то разыскал проблему. У меня была более ранняя резервная копия сайта несколько дней назад, поэтому я загрузил ее, и она сработала, хотя и пропустила работу последних нескольких дней. Я скопировал последний код проекта в папку Visual Studio > Projects, оставив старый код в папке Visual Studio > Website. Я загрузил решение, и оно снова заработало.
Я в основном сравнил файлы сайта, обновляя каждый из них по очереди и периодически запуская приложение. В конце концов приложение перестало работать. Последний файл, который я обновил, был MasterPage
файл, который расширил MasterPage
в этом была проблема.
Что я сделал, так это закомментировал пустой Page_Load
обработчик событий в MasterPage
, Я не понимаю, почему это может вызвать эту проблему, поэтому любые комментарии, объясняющие это, будут полезны и оценены.
это MasterPage
используется только на домашней странице и некоторых других, поэтому это объясняет, почему я не столкнулся с проблемой в ту ночь, когда я ее изменил. (Я не смотрел ни одной страницы, которые использовали это MasterPage
после внесения изменений). Хотел бы я, потому что тогда было бы намного легче выследить, но такова жизнь.
Поэтому я заменил весь мой последний код, добавил пустой Page_Load
обработчик событий в MasterPage
снова и снова все снова работает.