Ошибка создания элемента управления - пользовательский элемент управления - PullRequest
3 голосов
/ 19 декабря 2008

У меня есть пользовательский элемент управления, и он работает нормально ... за исключением того, что элемент управления не может быть отображен во время разработки. (Я использую VS 2008)

Я думаю, что многие люди, разрабатывающие пользовательские элементы управления, сталкиваются с этой проблемой ... Я получаю сообщение об ошибке «Ошибка создания элемента управления - CustomControlName». Ссылка на объект не установлена ​​на экземпляр объекта.

Я хочу обойтись. или, по крайней мере, отладить это ... (поскольку это проблема времени разработки, как отлаживать?)

Я пробовал, если (! DesignMode) код на методах OnInit, OnPreRender, RenderContents, CreateChildControls (я просто снимаю в темноте) ...

Помогите пожалуйста. Я действительно надеюсь, что это не ошибка VS!

Ответы [ 4 ]

1 голос
/ 19 декабря 2008

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

Если у вас есть конструктор без параметров, можете ли вы вставить код, чтобы показать, что происходит?

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

Гленн, ошибка при получении ошибки VS, а исправление еще не выпущено.

0 голосов
/ 24 декабря 2008

В ваших OnPreRender & CreateChildControls методах он вызывает this.Page. Вы можете попробовать обернуть их в

if (this.Page != null)
{
.....
}

Поскольку я не думаю, что в этот момент у вас будет объект Page, а я довольно уверен, что PreRender & CreateChildControls будет вызываться в режиме конструктора. Хотя я некоторое время не писал пользовательских серверных элементов управления, поэтому могу ошибаться (в последнее время работал в MVC).

0 голосов
/ 19 декабря 2008

Как отметил Гленн, первая проблема не может быть конструктором без параметров.

Вторым может быть то, что вы вызываете методы во время OnLoad или другие методы, о которых вы упоминали, у которых есть параметры, которые не инициализируются, или какая-то попытка вызова базы данных и т. Д., Которые обычно выполняются во время выполнения.

Если только они недавно не исправили эту ошибку *, и я не знаю, что следует иметь в виду, что свойство DesignMode работает для первого и второго уровня вложенных элементов управления, но помимо этого оно обычно не работает правильно. (Например, форма, содержащая UserControl [1], который содержит другой UserControl [2], DesignMode работает с формой и [1], но не [2]).

Также, чтобы договориться с Гленном, просмотр кода поможет.

* Из моего недавнего опыта работы с вложенными пользовательскими элементами управления это не было исправлено.

...