簡體   English   中英

如果在Page_Load中添加了UpdatePanel,則無法在ascx控件中使用

[英]UpdatePanel not working in ascx control if is added on Page_Load

我有一個ascx控件,正在將它加載到母版頁的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);             
     }

問題是這樣的:如果我以這種方式加載用戶控件,則主頁中的UpdatePanel無法正常工作,但是如果我在主頁中添加注冊標簽作為下面的代碼,並以這種方式導入ascx,則UpdatePanel可以正常工作。

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

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

我假設我可能需要在不同的頁面生命周期事件中加載控件,我確實嘗試過Page_Init,但沒有用,請幫忙。

如前所述,PreInit在母版頁中不存在。 但是,這不是必需的。 只需確保將UserControl添加為UpdatePanel的ContentTemplateContainer的子控件即可:

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

希望能幫助到你!

我不確定當您說“不起作用”(什么不起作用?)時是什么意思,但是請記住在將控件添加到“控件”列表之前設置控件的ID,否則事件可能無法正確執行:

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

您可能要在PreInit事件上添加它。 閱讀博客文章,討論您的需求。

編輯:

正如@Tim指出的那樣,由於您試圖在母版頁中執行此操作,因此沒有PreInit事件。 您可以使用技巧 (或 技巧 )作為解決方法,但是通常您沒有太多選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM