我有一个代码将<key,value>
插入Dictionary
,将Dictionary
放入ViewState
,然后再从Dictionary
检索ViewState
这是我填充Dictionary
并将其放入ViewState
:
foreach (DataTable table in IsoDataSet.Tables)
{
foreach (DataRow dr in table.Rows)
{
if (dr.IsNull("email"))
{
email = "No emails on file";
}
else
{
email = (String)dr["email"];
}
oldEmails.Add((String)dr["isonum"], email);
ViewState["OldEmails"] = oldEmails;
}
}
然后我需要从Dictionary
获取ViewState
:
oldEmails = (Dictionary<String, String>)ViewState["OldEmails"];
在执行oldEmails.Count
时,我发现我的Dictionary
中的记录数与开头的记录数相同。
但是当我进行检查时:if(oldEmails.ContainsKey(strIsoNum))
它失败了。虽然我的词典中有一个带有给定键的数据
我做错了什么?
答案 0 :(得分:1)
Dictionary
不可序列化,无法保存在视图状态。
要将其保存在视图状态,您需要将其转换为List
或其他内容,并在页面加载时和使用之前将其重新转换为Dictionary
。
这就是为什么当您尝试将其保存在视图状态时,视图状态实际上不会保存,因为无法序列化它。如果您没有太多的项目可以在列表中搜索,那么最好直接使用List
特殊情况。
关于如何序列化字典的一些问题。
Serializing .NET dictionary
Serialize Class containing Dictionary member