當初我實現這個的時候也是相當郁悶,老是丟失值,於是我就用Visable來解決(是加載WebControl)。以下是其他人的解決方案,蠻有參考價值的。
引用 隨心所欲
http://www.cnblogs.com/dlwang2002/archive/2006/12/07/585093.Html
結論就是:
1:在特定的時刻加入該控件的定義。至少在Page_Load以前,我用的Page_Init。晚了就執行不了了
2:該控件的id必須一致。因為狀態的恢復是根據控件id來完成的。
3:Rebuild的時候一定不要調用子控件的初始化的函數,這樣會浪費時間。
問題:可不可以通過設置UserControl的IsPostBack屬性來達到一種和Page類似的處理方式呢?這樣在UserControl裡面就可以使用if(!IsPostBack)來做一些數據初始化了。
引用 Cat Chen
我有寫過《深入理解ASP.Net動態控件》的系列文章,你可以去看看有沒有值得參考的內容:
http://www.cnblogs.com/cathsfz/archive/2006/10/31/545521.Html
http://www.cnblogs.com/cathsfz/archive/2006/11/05/550985.Html
http://www.cnblogs.com/cathsfz/archive/2006/11/19/564929.Html
關於追趕加載也詳細解釋了,並非0~n步都會在追趕加載中執行,只有特定的步驟會執行。如果控件已經加載完第k步,添加到另一個加載完第n步的控件中,則僅執行(k+1)~n步,前面的不會重復執行。
至於UserControl的加載很費時,這是你無法繞過去的。如果你的意思是,頁面默認加載UserControlA,發生事件後要丟棄UserControlA改為加載UserControlB,浪費了時間在加載UserControlA上。以現在的ASP.Net頁面生存周期模型,我們無法解決這個問題,你改進後的解決方案也還是要先加載默認的UserControlA。