2012-09-18 36 views
0

我有一個搜索功能,完成後,將數據存儲在通用列表中(List<ViewModel>)。到目前爲止,我一直在將viewmodel值分配給一個靜態變量,以允許我通過用戶可能使用的任何頁面請求重新使用數據。許多頁面請求共享複雜的對象 - C#MVC

雖然在今天的一些閱讀之後,似乎靜態變量值可以跨線程共享,這意味着如果我正在查看網站,則有可能通過修改包含我的搜索數據的靜態變量另一個用戶。

在我閱讀過程中,我看到了一些解決方案,例如將[ThreadStatic]屬性添加到變量中,儘管這不但沒有效果,反而被我的進一步解讀徹底駁回爲不適當的解決方案。

其他人談到在HttpContext.Current.Items中存儲變量,但我的理解是,它只能持續一個請求。

所以,我不確定這裏的最佳解決方案 - 理想情況下,我寧願不對應用程序進行太多的根本性更改,但總而言之,我希望能夠跨多個請求共享複雜對象?這樣做的最好方法是什麼?

非常感謝

回答

2

您可以在會話(HttpContext.Session)對象中單獨存儲每個用戶應該在內存中保存的對象。您的部署當然必須支持會話。

+0

感謝您的照顧 - 決定與會話繼續和它的正常工作。 –

0

靜態變量是一個糟糕的選擇。您可以使用會話或ViewState。至於我 - 第一個更好。作爲expample

if (Session["tmp"] == null) Session["tmp"]=new DataSet(); 
    DataSet ds = (DataSet)Session["tmp"]; 
    { 
     ...Do something with ds 
    }  
    Session["tmp"] = ds; 

您可以通過網頁或處理程序之間的數據集,但你有你的會話的生存期