2

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

如果是,那么除了 TempData 是否还有其他可用的替代方案?

4

5 回答 5

1

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

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

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

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

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

于 2011-10-12T14:02:12.773 回答
1

这取决于。

会话和cookies是为了解决某种问题而发明的,所以它们应该被用来解决那个问题。

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

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

于 2011-10-12T14:03:06.330 回答
0

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

于 2011-10-12T14:00:48.647 回答
0

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

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

Session 仍然被使用——如果你必须的话——它有它的位置。会话周围有很多“坏”,但是如果您需要存储会话特定信息并且您的站点不关心每天的大量点击,那么您可能会很好地接受点击。

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

于 2011-10-12T14:20:14.053 回答
-1

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

于 2011-10-12T13:54:02.650 回答