【问题标题】:Sessions in ASP MVCASP MVC 中的会话
【发布时间】:2012-03-12 13:24:51
【问题描述】:

我了解到 Sessions 不再是在 ASP MVC 中保存数据的推荐方式,而是我们应该转移到 ViewData(从控制器到 View)和 TempData(仅用于一次回发)。我们不应该使用 Session 的唯一原因是为了维护可测试性(MVC 支持 TDD,因此 HTTPContext.Session 在运行 TestMethods 时不会解析)。

但是 Sessions 广泛解决的目的仍然没有被 ViewData 或 TempData 解决。会话保存整个用户会话的上下文。

我仍然无法为 MVC 中的会话收集正确的建议和备选方案。可能是我理解正确的图片是错误的。我将不胜感激任何讨论的链接或你们的任何建议。

这将帮助我决定,将 Session 用于 WebForms 的用途,或者我们应该重新架构当前的应用程序,以便我们只能在强制使用 Session 时使用。

谢谢 苏梅特

【问题讨论】:

  • 如果您正确使用了会话(即用于存储与会话范围内的会话用户相关的每个会话信息,而不是数据与应用程序的功能相关)在 ASP.NET Web 窗体中,您应该在 ASP.NET MVC 中以相同的方式执行此操作。但是很可能你在 ASP.NET Web 窗体中使用会话作为通用存储,ASP.NET MVC 有其他机制(如你所写)。

标签: asp.net asp.net-mvc asp.net-mvc-3 session


【解决方案1】:

在 MVC 中会话仍然是 widely in use

为了使您的代码更具可测试性,您可以为 Session 提供一个抽象(例如接口),然后将其注入您的控制器 - 然后您可以向您的控制器提供模拟或存根的“会话”。

但我会坚持使用 ViewModel 或 ViewData 与您的视图进行通信 - 即视图不应直接访问 Session。

【讨论】:

  • +1 我正要写的差不多。我仍然在 ASP.NET MVC 应用程序中使用会话。例如就在前几天,我需要为 MVC 应用程序的各个部分(在本例中为下拉列表中的选定值)保留用户的过滤器设置,以便当他们返回到应用程序的该部分时过滤器将是相同的。使用 session 提供了最简单的方法。
  • @Dommer 只要性能不是问题,会话就没有问题。尽管关于通过抽象工作,但我完全同意 nonnbs 的观点。不过,我倾向于远离 ViewBag/ViewData:completedevelopment.blogspot.com/2011/12/…
  • 是的,出于与您相同的原因,我从未使用过 ViewBag/ViewData。我以前没看过你的博客,看起来我们可以就很多相同的东西咆哮/同意/等等……;-)
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 2015-06-08
  • 2013-05-03
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多