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
。 那么其他模型可以是复杂页面的特性。