在视图中访问会话数据是一种好习惯吗?

时间:2013-09-14 20:14:27

标签: asp.net asp.net-mvc

从设计和编码的角度来看哪个更好:直接在视图中访问会话数据或将它们加载到控制器中并使用viewbag将它们传递给视图?

3 个答案:

答案 0 :(得分:1)

如果你在你的控制器或你的视图中做某事,MVC真的不在乎,但我同意轴不会伤害mvc模式。由于Session已经在ViewData包装器中,因此您可以直接在View中访问它。 请注意,Session对象应该只包含简单的非敏感数据,如用户选择的语言或自定义ui-colorsheme。

答案 1 :(得分:0)

如果您确实需要使用Session,则应该在服务器端获取该数据,然后使用View Model中的Strongly Typed属性将其传递给View,而不是使用ViewBag。

因此,假设您的视图模型中有一个类型为IENumerable<SelectListItem>的属性,并且在您的视图中,您将使用强类型版本的Html.DropDownListFor帮助程序以这种方式绑定到模型:

@Html.DropDownListFor(x => x.ProductId, Model.Products)

答案 2 :(得分:0)

最好的办法是访问控制器中的会话。原因:

  • 性能。您可以很好地控制如何访问Session对象。如果您只需要阅读会话的属性,那么请指定您需要对会话的只读访问权限,MVC不会阻止会话,您将获得更高的性能。

  • 飘尔丽思。在纯MVC场景中,视图仅知道模型。因此,您在会话中关注的任何值都必须作为模型的一部分传递。