Что заставляет элементы управления разметкой быть нулевыми?

Хорошо, у меня очень странная проблема. У меня есть обычный UserControl с некоторыми элементами управления в разметке. На Page_Load эти элементы управления все еще null. И я пробовал EnsureChildControls

Выложено это так:

Masterpage -> Page -> mycontrol1 -> mycontrol2 -> проблема управления

ProblemControl - это то, где элементы управления равны нулю. MyControl1 содержит MyControl2. MyControl2 - это еще один UserControl, который содержит ProblemControl в своей разметке. В Masterpage нет ничего особенного, и Page содержит MyControl1 в своей разметке. Единственная странность в том, что ProblemControl создается динамически в Page_Init.

Все работает нормально, пока я не доберусь до ProblemControl, где ни один из элементов управления не создается. ProblemControl имеет все необходимые настройки, такие как свойство Page и Parent. Не вижу никаких проблем. Исходный код для всех этих проблем (кроме ProblemControl) довольно обширен, поэтому я надеюсь, что кто-то может просто дать мне несколько советов по устранению неполадок для этой проблемы, и если кто-то сталкивался с ней раньше.

Кроме того, я могу разместить ProblemControl на другом элементе управления Page, и он будет работать нормально, это что-то о mycontrol1 и / или mycontrol2. Но у нас никогда не было проблем с mycontrol1, а у mycontrol2 нет ничего плохого в этом. (которую я утомительно анализировал последние несколько часов).

У кого-нибудь еще была такая же проблема? Есть ли какие-то общие вещи, которые нужно проверить?

Обновлять:

Хорошо, в ближайшем будущем у меня будет небольшой тестовый пример, чтобы воспроизвести его. Но на данный момент кажется, что создание UserControl изнутри UserControl динамически на Page_Init - вот что вызывает проблему. Я могу сделать тот же код на странице ASPX, но когда я делаю это на элементе управления ASCX, он прерывается, и все является нулевой проблемой, как описано выше. Разве вы не можете вложить UserControls !?


person Earlz    schedule 03.05.2010    source источник
comment
возможный дубликат stackoverflow .com / questions / 2275625 /   -  person Earlz    schedule 04.05.2010


Ответы (2)


Техника отладки в крайнем случае: двоичный поиск ошибки.

Шаг 1. Создайте пустой элемент управления BlankControl1. вместо MyControl1. Добавьте к нему MyControl2. Это работает? Если это так, проблема в MyControl2 (прогресс!). В противном случае проблема хотя бы частично связана с MyControl1. Я предполагаю, что это так.

Шаг 2. Удалите как можно больше кода из MyControl1, оставив код, содержащий MyControl2. Продолжайте изменять его, пока либо проблема не исчезнет, ​​либо он не станет BlankControl1. В последнем случае происходит что-то странное, и вы захотите открыть утилиту сравнения файлов, чтобы выяснить, где скрываются различия.

Шаг 3. Теперь вы знаете, что нужно сделать, чтобы проблема исчезла. Либо это приводит к решению, либо возникает вопрос, как использовать вызывающий проблемы код, не нарушая ProblemControl. В любом случае вы гораздо ближе к решению.

person Brian    schedule 04.05.2010
comment
aw :( Я не люблю такую ​​отладку .. но думаю, мне придется сделать это завтра на работе .. - person Earlz; 04.05.2010

Хорошо, я нашел ответ: Пользовательский элемент управления ASP.NET для добавлять динамически (проголосуйте, чтобы закрыть как дубликат

Принятый ответ - вот что сработало для меня. Самым важным является использование Page.LoadControl("path.."), а не Page.LoadControl(typeof(mycontrol),null). Последнее вызвало то же самое. Я бы подумал, что они оба сделают то же самое, но, видимо, нет.

person Earlz    schedule 04.05.2010