2011-07-16 73 views
3
protected void addMoreDay_btn_Click(object sender, EventArgs e) 
     { 
      Control OneMoreDay = LoadControl("~/controls/Days/DayAdd.ascx"); 
      Days_div.Controls.Add(OneMoreDay); 
     } 

我將我的userControl動態加載到div元素..但問題是它只能工作一次! ..我的意思是我點擊addMoreDay_btn按鈕,它的工作原理,然後我嘗試再次單擊它不會創建我的控制的另一個實例!動態創建/加載用戶控件只能使用一次!

編輯

,我認爲它的工作原理,但它不保存最後創建一個..它只是與新創建的控制取代它..和我還是不怎樣解決這個! = S

+0

嘗試在功能附加兩個控制而不是一個。如果你這樣做,它有兩個嗎?如果不是,那麼問題在其他地方(因爲該部門正在被摧毀) –

+0

實際上它比這更復雜..這是關於頁面生命週期..我必須把我所有的控制在數組中,並指定數字在PreInit事件中創建實例..我發現這個視頻(這很複雜,我不能理解它到目前爲止足以構建這個),但這是我現在所有的東西>> http://www.asp.net/ajax/videos/how-to-dynamic-add-controls-to-a-web-page – lKashef

回答

5

問題正在發生,因爲動態添加的控件在每次回發之前正在銷燬,直到它再次創建。爲了讓動態控件在回傳中保持不變,每次頁面回傳時都必須添加它們。

請嘗試下面的代碼。請注意,在該方法Page_Init所添加的控制:

protected void addMoreDay_btn_Click(object sender, EventArgs e) 
{ 
    Control OneMoreDay = LoadControl("~/controls/Days/DayAdd.ascx"); 
    Days_div.Controls.Add(OneMoreDay); 
    Session["MyControl"] += 1 
} 


protected void Page_Init(object sender, EventArgs e) 
{ 
    for (int i = 1; i <= (int)Session["MyControl"]; i++) { 
     Control OneMoreDay = LoadControl("~/controls/Days/DayAdd.ascx"); 
     Days_div.Controls.Add(OneMoreDay);   
    } 
} 

參見here

+0

嗯,我剛纔發現它們會因爲頁面循環和回發而被破壞......但是我不明白爲什麼用於創建控件的代碼重複兩次,並且是否有一種變量會持續通過回發而不是Session變量,因爲它是一個對象,我在c#中遇到了一些問題,再加上我沒有將最適合在真實世界的應用程序中加載會話變量的負載..你瘦了什麼k? – lKashef

+0

這不能正常工作,因爲它在我刷新頁面時也會創建一個實例! – lKashef

+0

ViewState爲您的控件維護的重要性如何?如果你不需要它,那麼你可以將代碼從Page_Init方法移動到addMoreDay_btn_Click事件。但是,如果您需要維護viewstate,則必須添加另一個會話變量來檢查頁面是否已刷新。無論哪種方式,這絕對是一個可以解決的問題。 –

相關問題