Я также попробовал следующий код - который дает одинаковый результат (т. Е. И lblTitle, и lblDescription равны нулю)
protected void Page_Load(object sender, EventArgs e)
{
if (_ErrorMessage != null)
{
lblTitle.Text = _ErrorMessage.Message;
lblDescription.Text = _ErrorMessage.Description;
}
}
У меня было понимание, что функция LoadControl привела элемент управления, который она загружает, к текущему «состоянию» страницы, на которую она включена. следовательно, Init, Page_Load и т. д. все выполняются как часть вызова LoadControl.
Интересно, что эта (оставшаяся без ответа) запись на форуме asp.net демонстрирует ту же проблему, что и я.
MSDN Форумы Сообщение
Дополнительно - из MSDN:
Когда вы загружаете элемент управления в контейнерный элемент управления, контейнер вызывает все события добавленного элемента управления до тех пор, пока не достигнет текущего события. Однако добавленный элемент управления не догоняет обработку данных обратной передачи. Чтобы добавленный элемент управления участвовал в обработке данных обратной передачи, включая проверку, этот элемент управления должен быть добавлен в событие Init, а не в событие Load.
Следовательно, не должен ли LoadControl правильно инициализировать элемент управления?
EDIT:
Хорошо, я отвечаю на свой вопрос здесь.
Я нашел ответ на пост форума, на который я ссылался выше Здесь
По сути, ответ таков: LoadControl( type, params )
не может вывести ascx 'page infront' для анализа и, следовательно, не беспокоит инициализацию какого-либо из элементов управления. Когда вы используете версию LoadControl( "ascx path" )
, ей присваивается страница в начале и, следовательно, выполняется весь анализ и инициализация.
Итак, в общем, мне нужно изменить код, инициирующий управление, и разделить его на отдельные части. * 1034 Т.е. *
Control ErrorCntrl = LoadControl("ErrorDisplay.ascx");
ErrorCntrl.ID = SomeID;
(ErrorCntrl as ErrorDisplay).SetErrorMessage = MessageDetail;
divErrorContainer.Controls.Add(ErrorCntrl);
И все должно работать нормально. Это не так аккуратно, как моя предыдущая попытка, но по крайней мере это сработает.
Я все еще открыт для предложений по улучшению вышеупомянутого.
Приветствия