2011-02-08 99 views

回答

3

您可以編寫自己的TempData提供程序並將其存儲在Cookie中。請參閱ASP.NET MVC Store TempData in Cookie或者您可以擁有一個基類控制器,該控制器查找隱藏的輸入並保存對象/狀態並將其持久保存到每個http請求。

請注意,TempData僅在兩個控制器操作之間持續存在。

編輯:

你可以用同樣的例子,寫序列化到一個數據庫提供商......或者......甚至到磁盤。拍攝,就此而言,你甚至可以推出一個完整的自定義替換Session。您將創建一個會話工廠類,並通過某個靜態集合中的一個鍵存儲您的自定義會話對象。然後你可以通過cookies或隱藏的輸入來跟蹤會話密鑰,如上所述。

+0

這是一個很好solution.But如果我的對象大小是巨大的,然後它將是一個問題。 Cookies允許最大大小爲4 kb。在這種情況下,您能否給出一個好的解決方案?我們可以像緩存提供者一樣使用Velocity嗎? – Thanigainathan 2011-02-08 16:46:38

0

這是一個非常非常有用的問題,在MVC中瞭解更多。儘管我得到了一些問題,比如微軟認爲人們會知道TempData使用會話。

我上傳超過4kb的對象時出現問題。爲此,我們的建築師建議拆分該對象並將它們保存在Cookie中的塊中。我使用下面的博客代碼來分割對象的序列化字符串。

http://lukencode.com/2010/04/21/split-string-into-array-of-chunks/

所以在SaveTempData方法拆分的cookie,並將它們收集到LoadTempData一個字符串。這就解決了問題。

但我使用像NVElocity這樣的分佈式緩存技術總是更好。

0

創建一個類,它看起來像這樣:

public class GlobalStorage 
{ 
    public static Dictionary<string, object> Device = new Dictionary<string, object>(); 
} 

商店:

GlobalStorage.Device.Add("myKey", mydata); 

檢索:

string mydata = GlobalStorage.Device["myKey"].ToString();