UpdatePanel не работает в элементе управления ascx, если он добавлен в Page_Load - PullRequest
0 голосов
/ 10 марта 2012

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

Загрузка ascx на главной странице:

     protected void Page_Load(object sender, EventArgs e)
     {    
        usercontrols.mainmenu adminmenu = (usercontrols.mainmenu)LoadControl("~/mymenupath.ascx");
        //phmainmanu is a placeholder in masterpage
        phmainmanu.Controls.Add(adminmenu);             
     }

проблема заключается в следующем: если я загружаю usercontrol таким образом, моя UpdatePanel, которая находится внутри мастер-страницы, не работает, но если я добавляю тег регистрации на мою мастер-страницу как приведенный ниже код и импортирую ascx таким образом, UpdatePanel работает нормально.

<%@ Register Src="~/admin/usercontrols/contentexplorer.ascx" TagName="Tree" TagPrefix="NAV" %>

<NAV:Tree ID="treenav" runat="server" />

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

Ответы [ 3 ]

0 голосов
/ 10 марта 2012

Как указывалось ранее, PreInit не существует в MasterPage. Однако это не обязательно. Просто убедитесь, что вы добавляете свой UserControl в качестве дочернего элемента ContentTemplateContainer элемента UpdatePanel:

protected void Page_Load(object sender, EventArgs e)
{
    WebUserControl1 ctrl = (WebUserControl1)LoadControl("~/WebUserControl1.ascx");
    UpdatePanel1.ContentTemplateContainer.Controls.Add(ctrl);
}

Надеюсь, это поможет!

0 голосов
/ 10 марта 2012

Я не уверен, что вы имеете в виду, когда говорите «не работает» (что не работает?), Но не забудьте установить идентификатор вашего элемента управления перед добавлением его в список элементов управления, иначе события могут выполняться неправильно:

protected void Page_Load(object sender, EventArgs e)
{
    WebUserControl1 ctrl = (WebUserControl1)LoadControl("~/WebUserControl1.ascx");
    ctrl.ID = "controlId";
    UpdatePanel1.ContentTemplateContainer.Controls.Add(ctrl);
}
0 голосов
/ 10 марта 2012

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

РЕДАКТИРОВАТЬ:

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

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