2010-11-22 44 views

回答

2

SessionState的目的是將有關用戶會話的數據從一個HttpRequest持久化到下一個。在某些情況下,這比手動實現cookie或爲會話信息創建數據存儲並傳遞標識符更簡單。 MVC的做法是使用包裝SessionState的TempData。這意味着直接訪問SessionState可能沒有必要,除非您重寫某些核心基礎架構。我認爲模型是對數據更隱喻的表示。在模型中使用會話數據似乎並不完全正確,因爲模型可能代表了一些業務邏輯,SessionState會不必要地複雜化。 System.Web.Mvc提供了許多機制,允許我們維護狀態而不必直接使用HttpContext。這些機制包含爲ControllerContext,ActionFilter過濾上下文,ExceptionContext,AuthorizationContext,ModelBindingContext,RouteDataViewContext的屬性。它們有助於將一堆可能存儲在會話狀態集中的不同事物分隔成更多邏輯分隔的隔離專區。

TempData可以從ControllerContext和ViewContext中獲得。這是您訪問會話狀態功能的接入點。如果你想控制這些數據的處理和寫入,並且不確定在哪裏,動作過濾器是一個相當不錯的注入點,因爲他們將這種擔心放在主要的面向業務的控制器操作之外。本文探討如何使用ActionFilter自動將模型狀態持久保存在各個請求中:http://blog.jorritsalverda.nl/2010/03/10/maintainable-mvc-post-redirect-get-pattern/。我認爲這可能有幫助。這個問題不是非常具體......如果我沒有直接解決你的問題,請澄清。

1

我更喜歡將它們保留在控制器級別或將它們隱藏在自定義操作過濾器或模型活頁夾中。

會話狀態實際上是一個Web客戶端的概念,我寧願將它們排除在我的模型之外。或者至少我會將它包裝在我自己的會話或上下文界面中。