2011-02-16 110 views
1

我遇到了我的動態加載控件事件的問題。動態加載控件的狀態問題

這裏是我正在加載控件:

protected void Page_Load(object sender, EventArgs e) 
{ 
    LoadSubPageEditTemplate(); 
} 

protected void LoadSubPageEditTemplate() 
{ 
     pnlPageTemplate.Controls.Clear(); 
     BaseOfferAdmin adminControl = (BaseOfferAdmin)this.LoadControl("~/Controls/SingleOfferAdmin.ascx");       
     if (adminControl != null) 
     { 
      adminControl.ID = "Control_ID" 
      pnlPageTemplate.Controls.Add(adminControl); 
     } 
    } 
} 

的LoadSubPageEditTemplate()也從頁面上的一個按鈕觸發的事件,因爲我有按鈕事件已被執行之後更新它。

控制加載完美,我已經測試了它與一個基本的按鈕和回發火災如預期。不過,我用CheckBox得到奇怪的結果。

<asp:CheckBox runat="server" ID="cbOptionalAction" Text="CheckBox" AutoPostBack="true" OnCheckedChanged="cbOptionalAction_CheckChanged" /> 

CheckedChanged事件只在複選框被選中時觸發,我猜這意味着我的控件viewstate存在一些問題。如果我在頁面上有多個複選框,並且創建了一個回發,則checkchanged的每個複選框都將觸發checkchanged事件。

謝謝任何​​人抽出一點時間幫助我!

Ignus

+0

您是否試圖調用LoadSubPageEditTemplate();在Page_Init事件而不是Page_Load? Page_Init將被認爲是生成動態控件的最佳位置。您可能會發現這篇相關文章有幫助:http://www.singingeels.com/Articles/Dynamically_Created_Controls_in_ASPNET.aspx – kaushalparik27 2015-09-09 17:38:55

回答

-2

請僅在頁面不回發時加載控件。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     {   
      LoadSubPageEditTemplate(); 
     } 
} 
+0

這不起作用,當用戶控件的回發觸發時,它需要從頁面再次添加。如果我只添加它!回發後,控制消失。 – tribe84 2011-02-16 06:23:24