c#mvc model vs viewbag

假设您在页面中有人员A列表和人员B列表。 这两个是L2S中的单独类,代表两个不同的表。 因此,您无法传递单个模型,如下所示:

... @model PeopleA ... @foreach(var peopleA in Model.People) ... @foreach(var peopleB in //what?) 

因此,我想,我有三个选择可以遵循。

  • 第一个是将页面分成部分视图,以便我可以通过RenderAction帮助程序传递模型。 因为我只使用这些部分视图一次此选项似乎不吸引我。
  • 第二种选择是使用我不想要的ViewBags,因为我更喜欢强类型模型。
  • 最后一个,最后,我将要使用但想要在这样做之前询问,是创建一个模型如下:

ModelMyPage.cs

 public List peopleA { get; set; } public List peopleB { get; set; } 

MyController.cs

 ... ModelMyPage m = new ModelMyPage(); m.peopleA = // query m.peopleB = // another query return(m); 

你明白了。 这是完成我的任务的有效方法还是有更好的c#方式来做我想要的?

创建一个特定于页面的ViewModel,因为你的选择3是我的方式。

我相信这也是推荐的方法。

不,没有更好的主意。 在asp.net MVC中,M代表ViewModels,而不是Business,Domain模型。 建议您为视图创建ViewModel,并且不建议使用Business Models。 您应该设计ViewModel以满足控制器与Domain交互的需要,并从控制器到查看交互

我会以第三种方式做到这一点。 另外,如果你要为两个数组中的每个人渲染相同的html,我会在foreach之前将它们连接起来:

 var person in Model.PeopleA.Concat(Model.PeopleB) 

您的第一个和第三个选项似乎都可以。

ad 1)“只使用它们一次”并不是一个好的论据。 使用部分视图来组织视图。

ad 2)使用Viewbag添加查找列表等小项。

ad 3)ViewModels在MVC中变得很常见。 这可能是最好的方法。

我通常为页面创建一个Model,并将其命名为,例如AccountDetailsPageModel 。 那么其他模型可以是复杂页面的特性。