ошибка при добавлении элемента управления в элемент управления пользователя - PullRequest
0 голосов
/ 27 октября 2010

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

        LinkButton l = new LinkButton();
        l.Text = "Test";
        l.OnClientClick = "TestClick";
        l.ID = "TestID";
        l.Page = Page;
        Page.Controls.Add(l);

Я получаю эту ошибку при загрузке страницы:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

[InvalidOperationException: коллекция была изменена; операция перечисления может не выполняться.] System.Web.UI.ControlCollectionEnumerator.MoveNext () +8677726 System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter, дети ICollection) +217 System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) +8 System.Web.UI.Page.Render (писатель HtmlTextWriter) +29 System.Web.UI.Control.RenderControlInternal (средство записи HtmlTextWriter, адаптер ControlAdapter) +27 System.Web.UI.Control.RenderControl (средство записи HtmlTextWriter, адаптер ControlAdapter) +100 System.Web.UI.Control.RenderControl (писатель HtmlTextWriter) +25 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) +3060 "

Мне просто не разрешено добавлять элементы управления на страницу с помощью выделенного кода, когда я нахожусь в пользовательском веб-элементе управления? Ошибка не произойдет, если я не добавлю этот элемент управления в.

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

Необходимо убедиться, что элемент управления добавлен во время фазы PreInit жизненного цикла страницы . По сути, после возникновения события Init не следует изменять элементы управления в коллекции элементов управления страницы.

2 голосов
/ 27 октября 2010

Это потому, что вы добавляете его в элементы управления на странице, а не в пользовательский элемент управления ...

Ваш код будет вызываться со страницы, когда страница инициализирует свои элементы управления, и, очевидно, в этот момент вы не сможете добавить дополнительный элемент управления к существующему (частично инициализированному) дереву элементов управления страницы ...

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

Попробуйте это:

 this.Controls.Add(l)
1 голос
/ 27 октября 2010

Насколько я знаю, вам нужно использовать элемент управления PlaceHolder, если вы хотите динамически добавлять элементы управления

Подробнее здесь

...