0
我有一個用戶控件,使大量使用this.ViewState["Key"] = SomeValue
。它大部分是從我的Page_Init()加載的:爲什麼我的UserControl的ViewState部分保存?
protected void Page_Init(object sender, EventArgs e)
{
if(!IsPostBack)
{
ViewState["Blahblah"] = LoadSomeValue();
}
}
其餘的設置在不同的點。
但由於某些原因,它在隨後的回發中不可用。我覆蓋SaveViewState()檢查,只有他們三個被保存!
protected override object SaveViewState()
{
List<object> viewStateObjectsBefore = ViewState.OfType<object>().ToList();
object ret = base.SaveViewState();
List<object> viewStateObjectsAfter = ViewState.OfType<object>().ToList();
GC.KeepAlive(viewStateObjectsBefore);
GC.KeepAlive(viewStateObjectsAfter);
GC.KeepAlive(ret);
return ret;
}
兩個viewStateObjectsBefore
和viewStateObjectsAfter
包含10鍵/值對,但只ret
包含三個!
補充:移動初始化到Page_Load()
是不容易得到的選項,因爲必須初始化父母的Page_Load()
執行之前完成。