在ASP.Net MVC中避免使用状态管理技术是一个好主意吗?

时间:2011-10-12 13:48:25

标签: c# asp.net-mvc asp.net-mvc-3 state-management

在ASP.Net MVC 3.0中避免使用状态管理技术(会话,cookie等)是一个好主意吗?

如果是,那么除了TempData之外还有其他可用的选择吗?

5 个答案:

答案 0 :(得分:1)

这取决于您的具体要求。例如,会话状态和cookie是非常不同的野兽。

如果会话状态非常适合WebForms中的要求,那么它非常适合MVC。没有特别的理由不在MVC中使用它。

您基本上只有3个位置可以在客户端(cookie /隐藏值/查询字符串),数据库中的服务器(会话/缓存/静态)上存储数据。

有大量关于所有这些方法的优缺点的文档,一个很好的起点是:

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

答案 1 :(得分:1)

这取决于。

会话和cookie是为了解决某种问题而发明的,因此应该用它们来解决这个问题。

TempData在替换cookie方面没有多大帮助 - 因为cookie保存在客户端。 TempData也是Session,区别在于TempData仅用于重定向。只要TempData在重定向方案中非常有用,您可能希望为这些方案保持启用会话。

如果你没有面向会话的场景(比如对象创建有多个步骤,并且在第一步之后你无法将它保存到数据库),你可以避免使用它,但一般来说它本身并不邪恶。

答案 2 :(得分:0)

IMO,MVC中会话状态的规则与WebForms中的规则相同:如果必须,请使用它,但要保持使用的轻量级。如果您真的有一些数据可以跟踪每个用户/会话,则无需重新发明轮子。

答案 3 :(得分:0)

我发现在实现存储库模式时,状态在缓存中得到了很好的维护。在MVC Futures项目中,还有Html.Serialize方法,它提供'视图状态'状态存储。 http://mvccontrib.codeplex.com/

对于绑定到组合框的项目这样的信息,我们曾经在Web表单中自动为我们维护过,这里的一个很好的选择是调用存储库来获取数据。存储库维护对缓存的引用(理想情况下通过您创建的接口--ICache)。然后,存储库基于ex来缓存此数据。当前用户的名字,关键等等。有些人更喜欢有服务层缓存,但我觉得设计一个存储库层就是为了这个。

会话仍然使用 - 如果必须 - 它有它的位置。会话中包含很多“坏”,但如果您需要存储特定于会话的信息,并且您的网站不关心每天的大量点击,那么您可以很好地接受该命中。

TempData非常适合存储状态消息,以便在下一个请求中显示,例如“记录保存成功”,这样您就不会在重定向中丢失它,也不必在查询字符串上传递它。这是关于我唯一使用它的东西,尽管有些人用它来存储数据以便在下一个请求时重新绑定。

答案 4 :(得分:-1)

您可以直接在数据库中保存您的状态