2012-03-09 26 views
1

我有一個ascx控件,我將它加載到masterpage的Page_Load()上,在我的ascx控件中我有我的asp UpdatePanel。在母版頁UpdatePanel無法在ascx控件中工作如果添加在Page_Load上

加載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但沒有工作,請幫助。

+0

什麼意思「它沒有工作」,當它加載在Page_Init?如果根本不需要,爲什麼要動態添加它?你讓你的生活變得比必要的困難。 – 2012-03-09 23:05:23

+0

意味着UpdatePanel按預期工作!我在UpdatePanel的內容的按鈕和標籤,按鈕是具有功能觸發如果你點擊它應該改變標籤的使用進行重新加載整個頁面這是UpdatePanel的工作方式的文本,所以不工作的手段不改變文字,因爲它應該 – 2012-03-10 14:52:50

回答

-1

您可能希望將其添加到PreInit事件中。閱讀this博客文章,因爲它討論你需要什麼。

編輯:

由於@Tim指出,因爲你正在嘗試做這在母版,你沒有PreInit事件。您可以使用trick(或this)作爲解決方法,但通常您沒有太多選擇。

+0

MasterPage中沒有'PreInit'。 – 2012-03-09 23:18:54

+0

一般他** **已經選擇將其添加聲明,而不是動態是什麼始終是更好的選擇;) – 2012-03-09 23:47:11

+0

@TimSchmelter - 絕對真實,我只是想在他提供的上下文幫助。 – TheBoyan 2012-03-09 23:53:12

0

如前所述,PreInit不存在於母版頁中。但是,這不是必需的。只要確保你添加你的用戶控件的UpdatePanel中的ContentTemplateContainer的子控件:

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

希望它能幫助!

+0

嗨,謝謝,我的控件不在UpdatePanel中,不知道你爲什麼這麼說?UpdatePanel有一個標籤和按鈕,並且我所有的ascx控件都在masterpage中的佔位符中加載,只是爲了清楚我不想在UpdatePanel中加載ascx – 2012-03-10 14:43:27

+0

因此,您的問題是沒有獲取UserControl引發? – Reinaldo 2012-03-10 17:40:00

+0

是的,這是問題,如果我在loadholder.Controls.Add()中加載控件,updatePanel中的按鈕不會引發ajax調用,但是如果我在masterPanel中使用「<@ Register」標籤按鈕在updatePanel中註冊它的效果很好。 – 2012-03-12 19:31:47

0

我不確定當你說「不工作」(什麼不工作?)時你的意思,但記得在將控件添加到控件列表之前設置它的ID,否則事件可能無法正確執行:

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