2010-02-20 98 views
1

我在保存當前視圖的狀態時遇到了一些麻煩。在ASP.NET MVC 2應用程序中將哪些數據保存到會話中?

當然,我有幾個selectlist在控制器上調用他們自己的Action方法,該方法返回Index視圖,基於選擇列表的值過濾模型。

我也寫了一個小小的FileResult操作,它根據當前模型創建一個csv文件。但我只覆蓋一個選擇列表的,現在我只能保存selectList1的價值到會議,並與Session["SelectListValue1"]

  • 訪問它是什麼在這種情況下,最好的做法是什麼?
  • 我應該重做整個(每個SelectList的每個動作)部分嗎?
  • 我應該將每個SelectLists值保存到會話中並檢查它是否爲空?
  • 或者我應該將Lambda Expression保存到會話中並在每次通話期間對其進行修改?

回答

1

那麼,通常在MVC中,我們不直接保存到Session,它不被認爲是對應用性能產生影響的最佳實踐。通常,儘可能使每個請求都爲無狀態是最佳做法。

每個表單應儘可能遵循POST-Request-GET模式,因此您不打算按照您在WebForms中做的規則(您不斷髮回相同的表單/操作)。

所以你應該考慮你試圖捕捉的狀態是什麼。可能值的列表是一件事,可能來自數據庫,並可能在緩存中存儲爲列表或可枚舉(在某些情況下;可能在其他情況下每次查看它)。但是,選中的值可能代表osme其他對象上的屬性,所以應該使用它作爲獲取選定值的方法。

如果它不是持久對象的一部分,那麼您可以每次只讀取帖子值並再次設置視圖狀態(可能是最佳做法),或者如果您需要在重定向中保留該值,然後使用TempData包(其工作方式與會話非常相似;實際上會使用會話),但在下一次請求之後值會被垃圾回收,因此您不必擔心內存膨脹。

0

這聽起來並不像你需要使用會話。你不能通過查詢字符串或表單傳遞你的選擇列表的值嗎?

相關問題