UserControl работает на одной странице, но не на других - PullRequest
0 голосов
/ 25 июня 2009

Я поставил эту проблему и ранее здесь . Я снова столкнулся с такой же проблемой. У меня есть пользовательский элемент управления, который показывает информацию из некоторого бизнес-объекта. Я уже использую это на двух страницах. На обеих страницах я вызываю метод с бизнес-объектом для привязки элементов управления (в основном меток asp) в пользовательском элементе управления к свойствам объекта. Я вызываю этот метод в методе LoadComplete на странице aspx.

  protected void Page_LoadComplete(object sender, EventArgs e)
  {
      control.LoadData(bussinessObject);
  }

Работает нормально на обеих страницах. Теперь у меня третья страница, где я использую тот же элемент управления. Теперь, когда я звоню LoadData на этой новой странице, я получаю NullReference исключение:

 Object reference not set to an instance of an object.
 Description: An unhandled exception occurred during the execution of the 
     current web request. Please review the stack trace for more information 
     about the error and where it originated in the code.

 Exception Details: System.NullReferenceException: Object reference not set 
   to an instance of an object.

 Source Error:

 Line 91:             lblOrgName.Text = obj.Name;

EDIT: lblOrgName имеет значение NULL :( Пожалуйста, помогите мне!

РЕДАКТИРОВАТЬ 2: Я прошел через код. После загрузки страницы страницы, содержащей страницу, вызывается Page_Load Masterpage, а затем вызывается страница загрузки проблемного элемента управления. Остановка при закрывающей скобке (}) этой функции загрузки страницы Я набрал lblOrgName в Immediate Window, и она показала ноль (

Затем в LoadComplete страницы, содержащей пользовательский элемент управления, я остановился и набрал имя элемента управления в ближайшем окне. Он показывает все метки и другие элементы управления в нуле.

РЕДАКТИРОВАТЬ 3:

Я поместил защищенный конструктор в UserControl, как подсказал Stendhal в ответах:

 protected OrgInfo(){ }

Теперь я получаю эту ошибку:

 Compiler Error Message: CS0122: 'Controls.OrgInfo.OrgInfo()' is inaccessible 
             due to its protection level.

Страница aspx в корневом каталоге проекта и элемент управления OrgInfo находятся в папке Controls.

РЕДАКТИРОВАТЬ 4:

Я попытался создать все элементы управления (в основном метки) в методе загрузки страницы, но, увы, счет коллекции элементов управления равен 0 (нулю)!

Ответы [ 3 ]

2 голосов
/ 25 июня 2009

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

Вы можете проверить это, поместив защищенный конструктор по умолчанию в коде для пользовательского элемента управления:

защищенный MyUserControl () {}

Таким образом, элемент управления не может быть создан как серверный элемент управления.

2 голосов
/ 25 июня 2009

Я поставил следующую строчку на странице:

 <%@ Register src="~/Controls/OrgInfo.ascx" TagName="OrgInfo" TagPrefix="proj1"/>

и все работает!

0 голосов
/ 25 июня 2009

Звучит так, как будто элемент управления "lblOrgName" пытается присвоить значение, но он еще не встроен / не разрешен на странице aspx.

Убедитесь, что в директиве @page проблемной страницы aspx у вас есть следующий набор:

AutoEventWireup="true"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...