Почему мой веб-элемент управления недействителен?

У меня есть веб-сайт в asp.net, который использует главную страницу. На этой главной странице у меня есть элемент управления с несколькими представлениями с одним представлением, в котором есть весь контент для страниц содержимого, и одним представлением, которое имеет некоторый локальный контент для главной страницы, где я показываю сообщения об ошибках со всех страниц содержимого.

В этом представлении об ошибках у меня есть элемент управления меткой asp.net, который отображает сообщения об ошибках. Обычно метка работает нормально, но в некоторых случаях метка имеет значение null, что приводит к исключению NullReferenceException. Теперь я обработал этот случай, проверив, является ли метка нулевой, прежде чем использовать ее, но все же мой вопрос:

Почему этот ярлык недействителен? Какие обстоятельства могут привести к этому?

EDIT: На главной странице у меня есть метод SetErrorText, который принимает строку и устанавливает метку. Я вызываю этот метод из метода Page_Load страниц контента, и обычно он работает нормально. Во всех случаях, кроме двух (которые я обнаружил до сих пор), метка инициализируется, и ничто не отличает эти два случая от всех работающих.

Кроме того, инициализируются все остальные элементы управления на главной странице, например элемент управления View, в котором находится метка.

Когда Page_Load страницы содержимого перекатывается, главная страница должна быть заполнена.


person Cros    schedule 05.09.2008    source источник


Ответы (4)


Похоже, проблема заключалась в неряшливости. Кто-то забыл удалить автоматически сгенерированные элементы управления содержимым, которые Visual Studio добавляет на все страницы содержимого, где главная страница имеет элемент управления ContentPlaceHolder.

Если на странице содержимого есть элемент управления Content, все элементы управления, размещенные в элементе управления ContentPlaceHolder на главной странице, по-видимому, будут нулевыми.

person Cros    schedule 05.09.2008

Из какого метода на главной странице вы получаете доступ к ярлыку? В зависимости от этапа жизненного цикла страницы элемент управления label может быть еще не загружен.

person Glenn Slaven    schedule 05.09.2008

Можете ли вы получить к нему доступ до того, как он будет создан? Проверьте жизненный цикл страницы: http://msdn.microsoft.com/en-us/library/ms178472.aspx

person Daren Thomas    schedule 05.09.2008

У меня была очень похожая ошибка. В моем случае это было вызвано странностями компилятора .NET, связанными с файлом конструктора элементов управления. Даже если в файле конструктора элементы управления определены правильно, удалите его, заново сгенерируйте и перестройте (обязательно перестройте, а не просто «создайте»). См. верхний ответ здесь, чтобы узнать, как восстановить файл конструктора:

Как сделать вы заставляете Visual Studio регенерировать файлы .designer для файлов aspx/ascx?

person Chris Halcrow    schedule 03.09.2015