Динамическая инициализация обратной передачи usercontrol - PullRequest
0 голосов
/ 08 октября 2009

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

Теперь, чтобы сделать это, поскольку они 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 - это тип пользовательского элемента управления.

Редактировать: Решение согласно вводу Джоэла Кохорна.

1 Ответ

3 голосов
/ 08 октября 2009

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

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

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

...