簡體   English   中英

動態用戶控件保留回發狀態

[英]Dynamic user controls preserve state on postback

我很難面對ASP.NET Web窗體中動態用戶控件的問題(我知道它們很爛,但是我的項目依賴它們)。 簡而言之,我的情況是:

  1. 我在aspx頁面中有一個DropDownList,其中有幾個選項可供選擇(對於每個選項,我都有不同的User控件要呈現);
  2. 當我選擇一個時,此選項的用戶控件在下面的UpdatePanel內部的占位符中呈現:

在此處輸入圖片說明

  1. 在DropDownList SelectedIndexChanged方法的后面代碼中,我使用Page.LoadControl(string virtualPath)創建用戶控件的實例,然后將其添加到占位符的控件中:

      selectedFilters.Controls.Add(myUserControlObject); 

第一個用戶控件呈現正常,但是當我嘗試將新的用戶控件添加到占位符時,第一個用戶控件消失,僅呈現新的用戶控件。 如何保留整個用戶控件對象的狀態,以便在回發過程中它們不會丟失?

您將需要在每個回發中添加每個動態添加的控件,通常最好在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”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM