如果在Page_Load上添加了UpdatePanel,则不能在ascx控件中工作

时间:2012-03-09 23:01:52

标签: c# asp.net custom-controls updatepanel

我有一个ascx控件,我将它加载到masterpage的Page_Load()上,在我的ascx控件中我有我的asp UpdatePanel。

在母版页中加载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 :(得分:0)

如前所述,MasterIn中不存在PreInit。但是,没有必要。只需确保将UserControl添加为UpdatePanel的ContentTemplateContainer的子控件:

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

希望它有所帮助!

答案 1 :(得分:0)

当你说“不工作”(什么不工作?)时,我不确定你的意思,但是记住在将控件添加到控件列表之前设置控件的ID,否则事件可能无法正确执行:

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

答案 2 :(得分:-1)

您可能希望在PreInit事件中添加它。阅读this博客文章,因为它会讨论您的需求。

编辑:

正如@Tim所指出的,因为你试图在一个母版页中这样做,你没有PreInit事件。您可以使用trick(或this)作为解决方法,但通常您没有太多选择。