2009-10-08 38 views
0

我有一個用戶控件,動態加載其他用戶控件。問題是回發時我的控件不存在。現在我的印象是我不得不重新初始化它們。動態用戶控件回發初始化

現在要做到這一點,因爲他們是UserControls並使用ascx文件UserControl的控件都沒有在空構造函數中初始化。

問題:我該如何加載UserControl的ascx文件?

目前,我試圖做這樣的:

for (int i = 0; i < count; i++) 
{ 
    Control ctrl; 
    if(ctrlCollectionType.Rows[i]["Type"] is UserControl) 
     ctrl = LoadControl((string)ctrlCollectionType.Rows[i]["Path"]); 
    else 
     this.LoadControl(ctrlCollectionType[i]["Type"], null); 

    ctrl.ID = i; 
    pnlContent.Controls.Add(ctrl); 
} 

哪裏ctrlCollectionType是用戶控件的類型。

編輯:解決方案根據Joel Coehoorn的意見。

回答

3

你要做兩個步驟:

  • 負載控制(您this.LoadControl()調用做到這一點)
  • 添加加載的控制到窗體的Controls集合。你沒有顯示任何代碼。

此外,你需要做的這個之前視圖狀態在頁面生命週期的恢復,或者你想到事情會無法正常工作。由於ViewState在Page_Load事件觸發之前被恢復,這意味着您需要在Page_Init或更早的版本上執行此操作。

+0

從最佳實踐的角度來看,你會是對的,出於好奇心,保存控件ID的最佳方式是什麼? – Highstead

+0

ClientID或只是普通的服務器端ID?如果它是服務器ID,那麼只要確保在創建它時的回發中以相同的方式進行設置即可。 –

+0

那麼問題是用戶能夠選擇動態添加的控件,所以我不能指望以同樣的方式創建它。 – Highstead