2015-06-19 106 views
0

我很難面對ASP.NET Web窗體中動態用戶控件的問題(我知道他們吸吮,但我的項目依賴於他們)。所以,簡單地我的情況是:動態用戶控件在回發時保留狀態

  1. 我有幾個選項我的aspx頁面一個DropDownList從(每一個,我有不同的用戶控件呈現)選擇 ;
  2. 當我選擇一個,此選項的用戶控制呈現在下面的佔位符內的UpdatePanel:

enter image description here

  1. 在後面的代碼中的DropDownList的SelectedIndexChanged方法創建的用戶的實例使用Page.LoadControl(字符串virtualPath)進行控制,然後將其添加到佔位符控件中:

    selectedFilters.Controls.Add(myUserControlObject);

第一個用戶控件呈現正常,但是當我嘗試將新用戶控件添加到佔位符時,第一個用戶控件消失並且僅呈現新的用戶控件。我如何保留整個用戶控件對象的狀態,使其在回發期間不會丟失?

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

0

您需要在每個回發中添加每個動態添加的控件,這通常最好在Page_PreLoad事件中完成,以便動態添加的控件將返回到基於ViewState和發佈值的最後一個狀態。

您可以使用ViewState存儲添加了哪些控件。你會怎麼做這要看您的具體情況,但它可能是這樣的,當你動態添加控件,你會怎麼做:

ViewState["DynamicControl1"] = true; 

,然後在Page_PreLoad事件......

if ((bool)ViewState["DynamicControl1"]) 
{ 
    //Add your control again here, 
    //possibly duplicated from your DropDownList SelectedIndexChanged handler 
} 

根據您的ViewState設置,只要控件添加到頁面生命週期的右側,ASP.NET就會自動重新填充DropDownList項目列表和選定值。如果您禁用了ViewState,那麼當您在Page_PreLoad事件中添加控件時,您將需要重新填充您的列表項。

請注意,動態添加的控件每次回發都具有相同的ID可能很重要,因此如果遇到問題,請嘗試將ClientIDMode設置爲「AutoID」。

相關問題