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#方法来完成我想要的?

asp.net mvc - c# mvc model vs viewbag

创建特定于页面的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。然后其他模型可以作为复杂页面的属性