我試圖存儲在自定義控制的ViewState的一個Dictionary<string, string>
我開發ASP.NET 2.0:在ASP.NET視圖狀態下存儲Dictionary <string,string>?
private Dictionary<String, String> Items
{
get
{
object d = ViewState["Items"];
return (d == null ? null : (Dictionary<String, String>)d);
}
set
{
ViewState["Items"] = value;
}
}
訪問它看起來像這樣:
public void UpdateData
{
if (this.Items == null)
this.Items = new Dictionary<string, string>();
else
this.Items.Clear();
//Fill the collection
}
當它到達設置第一次加載頁面,它似乎工作正常。但在後續回發中,返回的值始終爲空(始終發生第一種情況)。調試顯示它在屬性get
中的ViewState之外獲得null
。
我做了一些研究,並有found的類必須實現IStateManager
是saveable在ViewState中,和Dictionary MSDN page似乎表明Dictionary<TKey, TValue>
沒有。但是我之前在ViewState中存儲了字典而沒有任何問題。這裏發生了什麼?我以前的經歷是僥倖嗎?
更新:我試着在屬性中添加一些測試代碼:ViewState["ItemTest"] = "foo";
在set
和string test = (string)ViewState["ItemTest"];
在get
。像Dictionary
一樣,它是空的。所以它似乎不是可序列化的Dictionary
的問題。另外,爲了澄清,UpdateData
從我的RenderControl
重寫中調用,這發生在包含該控件的頁面中的Page_Load
之後。
你在哪裏檢查值?我相信ViewState在'Init'事件之後被加載。 – keyboardP 2011-06-09 17:51:33
在返回之前檢查null嗎?第一次加載頁面時,那裏不會有價值。 – 2011-06-09 17:52:39
您的控件是否在頁面中添加了靜態或動態? – ibram 2011-06-09 17:54:31