2012-02-22 69 views
1

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

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

我仍然无法为MVC中的会话收集正确的建议和替代方案。可能是我误解了正确的图片。我会很感激任何关于讨论的链接或者你们的任何建议。

这将帮助我决定如何使用Session来实现它与WebForms一起使用的目的,或者我们应该去重新构建当前的应用程序,这样我们就可以只在必要时使用Session。

感谢 Sumeet

+1

如果您在ASP.NET Web窗体中正确使用了会话*(即用于在会话范围内存储与会话用户相关的每会话信息,而不是与应用程序功能相关的数据)你应该在ASP.NET MVC中以相同的方式来完成它。但是可能性是你在ASP.NET Web窗体中使用会话作为任何东西的通用存储,对此,ASP.NET MVC有其他机制(如你所写)。 – bzlm 2012-02-22 08:16:51

回答

3

会话仍在MVC widely in use

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

但我会坚持使用ViewModel或ViewData与您的意见沟通 - 即视图不应该直接访问会话。

+1

+1我正要写很多相同的东西。我仍然使用ASP.NET MVC应用程序中的会话。例如就在那一天,我需要为MVC应用的各个部分保留一个用户的过滤器设置(在这种情况下,在下拉列表中选择的值),以便过滤器在返回到该应用的该部分时是相同的。使用会话提供了最简单的方法。 – 2012-02-22 08:09:15

+1

@Dommer只要性能不是问题,会话没有任何问题。尽管通过抽象工作,但我完全同意nonnbs的观点。我倾向于远离ViewBag/ViewData:http://completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html – 2012-02-22 14:56:51

+0

是的,我从来没有使用ViewBag/ViewData的相同你的原因。我以前没见过你的博客,看起来我们可以在很多相同的东西上咆哮/同意/等等...... ;-) – 2012-02-22 15:20:47