Программно добавленный пользовательский элемент управления не создает дочерние элементы управления - PullRequest
2 голосов
/ 23 февраля 2009

У меня есть пользовательский элемент управления (.ascx) в моем проекте, который я добавляю на страницу программно в обработчике события Page_Load страницы, например:

Controls.Add(new MyProject.Controls.ControlWidget());
Databind();

Когда я пытаюсь получить доступ к дочерним элементам управления изнутри самого элемента управления, они не существуют.

public override void DataBind()
{
  myrepeater.DataSource = GetDataSource(); 
  // throws an exception because myrepeater is null

  base.DataBind();
}

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

Ответы [ 2 ]

5 голосов
/ 23 февраля 2009

Вам нужно использовать LoadControl, чтобы загрузить его, а не просто создать экземпляр класса. LoadControl делает «магию» за кулисами, чтобы связать все и создать экземпляр интерфейса.

0 голосов
/ 23 февраля 2009

РЕДАКТИРОВАТЬ: Я неправильно понял ваш вопрос,

попробуйте добавить свой UserControl на свою страницу:

UserControl uc = new UserControl();
uc.LoadControl(Server.MapPath("MyUserControl.ascx");
this.Controls.Add(uc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...