2017-01-27 169 views
1

访问字典值我有一个像下面存储和会话

Dictionary<Tuple<int, int>, bool> sampleDict= new Dictionary<Tuple<int, int>, bool>(); 

一本字典,我在会议

if (!IsPostBack) 
{ 
    HttpContext.Current.Session.Add("SessionsampleDict", sampleDict); 
} 

现在我需要值添加到字典中添加,所以我的代码是这样。

sampleDict.Add(DictKey, true); 

现在的问题是,当我使用回传回来到我的网页,我失去的sampleDict我的所有数据。

我在做什么错在这里?如何在会话中添加字典的值?

+0

你如何阅读本次会议?你是在MVC还是Web表单? – Wheels73

+0

@ Wheels73它的Webforms – user1197114

+1

发布了更多的代码,其中sampleDict被引用。一种可能性是你正在重新实例化字典,而不是从会话中获取它。 – Vijay

回答

3

sampleDict将不会在会话中,只有它的值被复制到会话。在修改它们之后,您需要重新将值分配给会话变量。否则,你可以尝试这样的:

((Dictionary<Tuple<int, int>, bool>)HttpContext.Current.Session["SessionsampleDict"]).Add(DictKey, true); 
0

我猜,当你的sampleDict添加到您的会话你正在它的一个副本,并存储,所以当你调用

sampleDict.Add(...) 

它不会更新会话中的那个。

您可能需要在每次更新其他会话时更新会话中的会话,或者找到一种方法来只处理会话中的会话。

sampleDict.Add(...); 
HttpContext.Current.Session["SessionsampleDict"] = sampleDict; 

这样的事情?

不太熟悉Session类,但我做了一个粗略的猜测。让我知道如何去:)

3

试试这个:

Dictionary<Tuple<int, int>, bool> _sessionDict; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack || !(Session["SessionsampleDict"] is Dictionary<Tuple<int, int>, bool>)) 
    { 
     Dictionary<Tuple<int, int>, bool> localDict = new Dictionary<Tuple<int, int>, bool>(); 
     Session["SessionsampleDict"] = localDict; 
    } 
    _sessionDict = (Dictionary<Tuple<int, int>, bool>)Session["SessionsampleDict"]; 
} 

现在,你可以在页面中使用本地裁判_sessionDict其他地方访问字典。

0

当您在会话中保存字典,然后修改字典时,会话对象将不会更新,因为它不再是同一个对象。会话可以存储在数据库,redis或其他存储中,因此它只能克隆到原始对象。