2012-04-20 33 views
1

我有一個用戶控件「UserApplianceControl」,我需要動態添加到一個asp頁面。ASP用戶控件事件在包含頁面的OnLoadComplete後觸發

我用下面的代碼這樣做:

User.aspx.cs

protected override void OnLoadComplete(EventArgs e) 
    { 

     base.OnLoadComplete(e); 
     A5Lib.User u; 
     UserServiceReference.UserServicesClient myProxy = new UserServiceReference.UserServicesClient(); 
     u = myProxy.GetUser("user1"); 

     if (listOfAppliances != null) 
     { 

      foreach (A5Lib.Appliance str in u.Appliances) 
      { 
       UserApplianceControl uac = (UserApplianceControl)LoadControl("UserApplianceControl.ascx"); 
       uac.setAppliance(str); 
       Panel1.Controls.Add(uac); 
      } 
     } 
    } 

在UserApplianceControl,我有幾個按鈕。但是,無論何時按下按鈕,用戶控件的按鈕處理程序都不會被調用。事實上OnLoadComplete(上面)被首先調用,所以這些控件在最後一頁加載時被重新創建,並且在我可以處理該事件之前丟失了舊的控件。

爲什麼不在OnLoadComplete之前觸發事件?

+0

我打賭我的左鞋在父頁的Page_Load上發生了一些事情,這些事件正在清除Button_Click事件處理程序。你對頁面生命週期的熟悉程度如何? http://msdn.microsoft.com/en-us/library/ms178472.aspx當這類問題出現時,有90%的時間是因爲開發人員沒有考慮Page Lifecycle,或者誤解了事件發生順序。當然,我可能是錯的,但那將是我看起來的第一個地方。 – David 2012-04-20 20:30:45

+0

我在Page_Load中沒有做任何事......即它的空 – 2012-04-20 20:32:03

回答

2

您在頁面生命週期中重新創建控件的時間太晚了。

動態添加的控件必須存在(加載)不遲於onInit的任何視圖狀態/回發功能的工作。

將您的代碼移動到頁面的OnInit事件中。這將確保所有的控件都被重建之前,viewstate被恢復,並且頁面完成所有的按鈕/事件連接。

+0

它的工作!謝謝 – 2012-04-20 20:50:24

+0

很高興聽到:) – 2012-04-20 20:51:21

相關問題