2009-10-08 2 views
0

У меня есть пользовательский элемент управления, который динамически загружает другие пользовательские элементы управления. Проблема в том, что при обратной передаче мои элементы управления не существуют. Теперь я под впечатлением, что мне нужно повторно инициализировать их.Динамическая инициализация обратной передачи пользовательского контроля

Теперь, чтобы сделать это, так как они являются UserControls и используют ascx-файл, ни один из элементов управления UserControl не был инициализирован в пустом конструкторе.

Вопрос: Как загрузить файл ascx UserControl в это время?

В настоящее время я пытаюсь сделать это следующим образом:

for (int i = 0; i < count; i++) 
{ 
    Control ctrl; 
    if(ctrlCollectionType.Rows[i]["Type"] is UserControl) 
     ctrl = LoadControl((string)ctrlCollectionType.Rows[i]["Path"]); 
    else 
     this.LoadControl(ctrlCollectionType[i]["Type"], null); 

    ctrl.ID = i; 
    pnlContent.Controls.Add(ctrl); 
} 

Где ctrlCollectionType является Тип UserControl.

Редактировать: Решение по вводу Joel Coehoorn.

ответ

3

Вы должны сделать два шага:

  • Загрузить контроль (ваш this.LoadControl() вызов делает это)
  • Добавить загруженное управление Controls коллекции вашей формы. Вы не показывали код, который делает это.

Кроме того, вы должны сделать это до ViewState восстанавливается в жизненном цикле страницы, или вещи не будут работать, как вы ожидаете. Поскольку viewstate восстанавливается до возникновения события Page_Load, это означает, что вам нужно сделать это на странице Page_Init или ранее.

+0

Ах, вы были бы правы, из любопытства с точки зрения лучших практик, что было бы лучшим способом сохранить идентификатор элемента управления? – Highstead

+0

ClientID или обычный идентификатор сервера? Если это идентификатор сервера, просто убедитесь, что вы установили его таким же образом в обратной передаче, что и при создании. –

+0

Хорошо, проблема заключается в том, что пользователь может выбирать элементы управления, которые добавляются динамически, поэтому я не могу рассчитывать на его создание таким же образом. – Highstead

Смежные вопросы