0

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

4

3 回答 3

1

如果您在控制器或视图中执行某些操作,MVC 不会真正关心,但我同意轴投票不损害 mvc 模式。由于 Session 已经在 ViewData 包装器中,您可以直接在 View 中访问它。请注意,Session 对象应仅包含简单的、非敏感数据,例如用户选择的语言或自定义 ui-colorsheme。

于 2013-09-14T20:37:33.220 回答
0

最好的办法是访问控制器中的会话。为什么:

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

  • 纯度。在纯 MVC 场景中,视图只知道模型。因此,您在会话中关心的任何值都必须作为模型的一部分传递。

于 2013-09-14T22:04:54.903 回答
0

如果您确实需要使用 Session,您应该在服务器端获取该数据,然后使用视图模型中的强类型属性将其传递给视图,而不是使用 ViewBag。

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

@Html.DropDownListFor(x => x.ProductId, Model.Products)
于 2013-09-14T20:34:41.113 回答