2014-01-06 91 views
2

我有一個用戶控件我正在加載到一個在UpdatePanel內的div中。這裏是我的加載它的代碼:找不到動態添加用戶控件的實例.Net

controls.IDLControl IdlControl = LoadControl(@"~/controls/IDLControl.ascx") as controls.IDLControl; 
IdlControl.ClientIDMode = ClientIDMode.Static; 
IdlControl.ID = "IDLControl"; 
spGroup.Controls.Clear(); 
spGroup.Controls.Add(IdlControl); 

這裏是我試圖檢索它的一個實例代碼:

controls.IDLControl IdlControl = RecursiveFindControl(this, "IDLControl") as controls.IDLControl; 

private Control RecursiveFindControl(Control targetControl, string findControlId) { 
    if (targetControl.HasControls()) { 
     foreach (Control childControl in targetControl.Controls) { 
      if (childControl.ID == findControlId) { 
       return childControl; 
      } 

      RecursiveFindControl(childControl, findControlId); 
     } 
    } 

    return null; 
} 

但是,我得到的是空。我需要幫助解決這個問題。我需要重新將控件添加到pre-init頁面上,但它是可以添加的控件之一,這取決於從下拉列表中選擇哪個選項(它也是動態填充的) 。我被困在試圖弄清楚如何使這項工作。

+0

直到將其添加回'Page_Init'事件中,您纔會得到它。您可以隨時在「Page_Init」事件的下拉列表中檢查Selected選項,並決定是否添加您的用戶控件。 –

回答

0

您可以嘗試使用類似的方法,根據您的DropDownList中選擇的選項將控制權重新添加到Page_Init中。

protected void Page_Init(Object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     if (drpYourDropDown.Items.Count > 0 && drpYourDropDown.SelectedItem.Text == "yourOption") 
     { 
      AddIDLControl(); 
     } 
    } 
} 

private void AddIDLControl() 
{ 
    controls.IDLControl IdlControl = LoadControl(@"~/controls/IDLControl.ascx") as controls.IDLControl; 
    IdlControl.ClientIDMode = ClientIDMode.Static; 
    IdlControl.ID = "IDLControl"; 
    spGroup.Controls.Clear(); 
    spGroup.Controls.Add(IdlControl); 
} 
+0

我複製了代碼(幾乎),但它不起作用。我的下拉列表在page_init中是空的,所以我沒有辦法跟蹤它在回發之前選擇了什麼。我嘗試使用隱藏字段,但即使是在回發時也是如此。因此,我將代碼移動到Page_Init中,並將代碼移動到Page_Load中重新添加用戶控件,現在它可以正常工作。 – user2930100

+0

再次查看時,如果用戶控件中的數據未標記爲runat =「server」,則在此過程中的數據現在會丟失。這不是什麼大問題,我可以輕鬆處理。謝謝你的幫助。 – user2930100