我有一個ViewState的問題。我有一個aspx頁面,左側有一個treeview,右側有一個ASP.NET面板的UpdatePanel。它在內部面板,我加載和卸載動態用戶控件。我使用該更新面板來加載動態控件。Viewstate變量在用戶控件上動態加載丟失
我也爲我的用戶控件做了一個自定義控件,因爲我需要從頁面傳遞一些值。在該構造函數中,我使用ViewState來存儲這些值。
我第一次加載用戶控件時,我用參數調用它的構造函數。當我重新加載每個回發用戶控件時,我使用它的正常構造函數。
我的問題是我存儲在ViewState中的值在連續回發中變爲空值。
更新:
這是一張我的用戶控制的:
public class MyUserControl : System.Web.UI.UserControl
{
private int PKId
{
get { return ViewState["pkId"] as int; }
set { ViewState["pkId"] = value; }
}
public MyUserControl(int pkId)
{
this.PKId = pkId;
}
...
}
我下面這篇文章,以動態地加載控件:http://msdn.microsoft.com/en-us/magazine/cc748662.aspx#id0070065。
第二更新:
我還設置同一控制ID當我加載在第一時間和在每個reaload用戶控制。
也許我可以使用另一種方法來存儲這些值,如輸入隱藏字段或緩存。我選擇ViewState是因爲我不想用每個用戶的Session值超載服務器。
第三次更新:
I load the controls with this code:
System.Web.UI.UserControl baseControl = LoadControl(ucUrl) as System.Web.UI.UserControl;
if (baseControl != null)
{
baseControl.ID = "DestinationUserControl";
PanelDestination.Controls.Add(baseControl);
}
而且reaload與此代碼:
DynamicControls.CreateDestination ud = this.LoadControl(TrackedUserControl) as DynamicControls.CreateDestination;
if (ud != null)
{
ud.ID = "DestinationUserControl";
PanelDestination.Controls.Add(ud);
}
發生了什麼事?
請提供一些這樣做的代碼,以便我們可以更好地瞭解正在發生的事情。 – 2010-02-12 16:05:52
我已更新該問題。 – VansFannel 2010-02-12 16:46:14
爲什麼在初始加載時將它作爲UserControl鍵入,並在重新加載時作爲CreateDestination? – 2010-02-13 09:58:44