在ASP.Net MVC 3.0中避免使用状态管理技术(会话,cookie等)是一个好主意吗?
如果是,那么除了TempData之外还有其他可用的选择吗?
答案 0 :(得分:1)
这取决于您的具体要求。例如,会话状态和cookie是非常不同的野兽。
如果会话状态非常适合WebForms中的要求,那么它非常适合MVC。没有特别的理由不在MVC中使用它。
您基本上只有3个位置可以在客户端(cookie /隐藏值/查询字符串),数据库中的服务器(会话/缓存/静态)上存储数据。
有大量关于所有这些方法的优缺点的文档,一个很好的起点是:
答案 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)
您可以直接在数据库中保存您的状态