Не загружается загрузка страницы при создании динамического пользовательского элемента управления (веб-формы) - PullRequest
0 голосов
/ 31 января 2012

У меня проблема с программно созданными пользовательскими элементами управления.

Из моих тестов добавление пользовательского элемента управления в коллекцию другого элемента управления запускает жизненный цикл пользовательского элемента управления.В частности, он вызывает элемент управления Page_Load.Кто-нибудь знает, есть ли способ запустить жизненный цикл пользовательского элемента управления ДО вызова метода Controls.Add ()?

Default.aspx code

<asp:PlaceHolder1 ID="PlaceHolder1" runat="server" />

protected void Page_Init(object sender, EventArgs e)
{
    var module = LoadControl("~/Module.ascx") as Module;

    // If this line of code does not execute, the Page_Load method never executes in the user control.
    //PlaceHolder1.Controls.Add(module);
}

Module.ascx код

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <%# Container.DataItem %>
    </ItemTemplate>
</asp:Repeater>

protected void Page_Load(object sender, EventArgs e)
{
    Repeater1.DataSource = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    Repeater1.DataBind();
}

Ответы [ 2 ]

1 голос
/ 31 января 2012

Взгляните на эту статью:

http://msdn.microsoft.com/en-us/library/ie/ms178472.aspx#catch_up_events_for_added_controls

Для динамически загружаемых элементов управления их события должны быть "перехвачены".

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

0 голосов
/ 02 февраля 2012

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

var module = Page.LoadControl("~/Module.ascx") as Module;
module.Initialize();

В методе Initialize () могут быть выполнены любые функции, которые будут выполнены в событии Page_Load.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...