假设您在页面中有人员A列表和人员B列表。这两个是L2S中的单独类,代表两个不同的表。因此,您无法按如下方式传递单个模型:
...
@model PeopleA
...
@foreach(var peopleA in Model.People) ...
@foreach(var peopleB in //what?)
因此,我猜,我有三个选择可供选择。
RenderAction
帮助程序传递模型。因为我只会使用这些部分视图一次此选项似乎不吸引我。 ModelMyPage.cs
public List<PeopleA> peopleA { get; set; }
public List<PeopleB> peopleB { get; set; }
MyController.cs
...
ModelMyPage m = new ModelMyPage();
m.peopleA = // query
m.peopleB = // another query
return(m);
你明白了。这是完成我的任务的有效方法还是有更好的c#方式来做我想要的?
答案 0 :(得分:17)
创建特定于页面的ViewModel,因为您选择3就是我的方式。
我相信这也是推荐的方法。
答案 1 :(得分:8)
不,没有更好的主意。在asp.net MVC中,M代表ViewModels,而不是Business,Domain模型。建议您为视图创建ViewModel,并且不建议使用Business Models。您应该设计ViewModel以满足控制器与Domain交互的需要,以及从控制器到查看交互的需要
答案 2 :(得分:2)
我会以第三种方式做到这一点。另外,如果你要为两个数组中的每个人渲染相同的html,我会在foreach之前将它们连接起来:
var person in Model.PeopleA.Concat(Model.PeopleB)
答案 3 :(得分:2)
您的第一个和第三个选项似乎都可以。
ad 1)“只使用它们一次”并不是一个好的论据。使用部分视图来组织视图。
ad 2)使用Viewbag添加查找列表等小项目。
ad 3)ViewModels在MVC中变得普遍。这可能是最好的方法。
答案 4 :(得分:2)
我通常会为页面创建一个模型,并将其命名为,例如AccountDetailsPageModel
。然后其他模型可以适用于复杂页面。