asp.net mvc - c# mvc model vs viewbag
本文关键字:mvc vs viewbag model net asp | 更新日期: 2023-09-27 18:01:29
假设在一个页面中有一个人员a和人员B的列表。这两个是L2S中独立的类,代表两个不同的表。因此,您不能像下面这样传递单个模型:
...
@model PeopleA
...
@foreach(var peopleA in Model.People) ...
@foreach(var peopleB in //what?)
因此,我想,我有三个选择可以遵循。- 第一个是将页面划分为部分视图,以便我可以通过
RenderAction
helper传递模型。因为我只会使用这些局部视图一次,所以这个选项似乎对我没有吸引力。 - 第二个选择是使用ViewBags,这是我不想要的,因为我更喜欢强类型的模型。
- 最后一个,最后,我即将使用,但想问之前这样做,是创建一个模型如下:
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#方法来完成我想要的?
创建特定于页面的ViewModel,正如您的选项3是我要做的那样。
不,没有更好的主意了。在asp.net MVC中,M代表ViewModels,而不是Business、Domain模型。建议为视图创建ViewModels,不建议使用Business Models。你应该设计你的ViewModels以适应控制器与Domain交互的需要,以及从控制器到视图的交互
您的第一和第三个选项似乎都没问题。
广告1)"只使用一次"并不是一个好的反对理由。使用分部视图来组织视图。
2)使用Viewbag添加小项目,如查找列表。和3)视图模型是(成为)常见的MVC。这可能是最好的方法。
我会用第三种方法。此外,如果要为两个数组中的每个人呈现相同的html,我会在foreach:
之前将它们连接起来。var person in Model.PeopleA.Concat(Model.PeopleB)
我通常为页面创建一个模型,并将其命名为AccountDetailsPageModel
。然后其他模型可以作为复杂页面的属性