从ViewState检索的DIctionary不包含密钥

时间:2014-03-21 21:16:38

标签: c# asp.net dictionary viewstate

我有一个代码将<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))它失败了。虽然我的词典中有一个带有给定键的数据

我做错了什么?

1 个答案:

答案 0 :(得分:1)

Dictionary不可序列化,无法保存在视图状态。

要将其保存在视图状态,您需要将其转换为List或其他内容,并在页面加载时和使用之前将其重新转换为Dictionary

这就是为什么当您尝试将其保存在视图状态时,视图状态实际上不会保存,因为无法序列化它。如果您没有太多的项目可以在列表中搜索,那么最好直接使用List特殊情况。

关于如何序列化字典的一些问题。

Serializing .NET dictionary
Serialize Class containing Dictionary member

还有一个答案 How to store list of object into ViewState