2017-01-27 219 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或其他存儲中,因此它只能克隆到原始對象。