我试图存储在自定义控制的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