[英]Dynamic user controls preserve state on postback
我很難面對ASP.NET Web窗體中動態用戶控件的問題(我知道它們很爛,但是我的項目依賴它們)。 簡而言之,我的情況是:
在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.