簡體   English   中英

在視圖中存儲對象以在MVC 3中保持狀態持久性的最佳方法?

[英]Best way to store an object in the view for state persistence in MVC 3?

我正在使用ASP.NET MVC 3,我需要在請求之間維護一個C#對象。 它維護一些服務器端狀態信息,這對於這個問題並不重要。 目前,此對象被序列化為會話,然后在每個請求時被拉出。

這種方法的問題是該對象特定於會話,但我希望它特定於每個請求。 因此,在瀏覽器中打開第二個選項卡基本上會有自己的對象,而不是與第一個選項卡共享同一個對象,因為它是同一個會話。

所以顯然我需要將這個對象存儲在頁面上並將其與請求一起傳回。 我想知道最好的方法是什么。 客戶端不需要此對象中的信息,並且此對象中的數據不是敏感數據,因此我不打算阻止訪問者查看它。 我只是想知道在請求之間存儲此對象的最佳方法是什么。 是否有一種簡單的方法可以將C#對象序列化到視圖中,比如在隱藏字段(類似於Web窗體viewstate)中,然后在每個請求中將其取回?

您可以使用Futures項目中的Html.Serialize。 您可以通過Install-Package Mvc3Futures獲取它

我在c#中實現了一個版本的Facebook BigPipe,我使用HttpContextBase Items集合在請求之間存儲每個單獨的對象。

var someCollection = (List<T>)ViewContext.HttpContext.Items["SomeCollection"];    

因此,另一種解決方案 - 盡管是一種解決方法 - 將對象存儲在鍵值對中作為會話狀態的一部分,並將該鍵存儲為隱藏字段。

  1. thingToStore = new KeyValuePair<string, YourType>("key1", yourObject)
  2. 添加到會話狀態。
  3. 隱藏用戶表單中的密鑰。
  4. 檢索回發/動作調用的關鍵字
  5. 通過密鑰檢索對象。

密鑰可以是任何東西都是唯一的,因此您可以根據您提供的密鑰生成器注入對象持久性類型。

無論如何,這是做到這一點的一種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM