在一个视图/控制器中显示3个模型

本文关键字:控制器 显示 3个 模型 视图 一个 | 更新日期: 2023-09-27 18:05:02

我是Entity和Visual Studio的新手。我有两个已经填充了数据的模型第三个最初是控制器的一部分,我想在其中实现另外两个模型。我不想编辑另外两个模型,只显示表中已有的数据。

我已经尝试使用元组使用本教程在一个视图中的多个模型但是我无法使用@foreach语句。

@model Tuple<App.Models.ValueForecast, App.Models.FacilityEditor, App.Models.ForecastSub>

在一个视图中拥有三个模型的最简单方法是什么?另外两个模型必须能够显示其表数据中的数据。

我知道有一个方法与viewModels,但从表的数据没有显示出来,我使用这个方法:ASP MVC 3中一个视图中的两个模型但没有成功

在一个视图/控制器中显示3个模型

只是创建一个对象来传输数据,你需要区分你的领域模型(问题的逻辑应该驻留在哪里),你的数据模型(通常映射到数据库和东西),和你的数据传输对象(谁是唯一存在的理由是封装你的对象之间传递方法)。

当你向一个方法传递太多参数时,或者当你在视图中需要几个对象时,你需要一个DTO(谈论c#和web开发)dto。

甚至在新的c#核心和他的web开发部分,许多人建议有一个名为"ViewModels"的文件夹,你可以在每个视图中放置一个视图模型,允许传递复杂的对象。

另一个澄清的链接:什么是视图模型?

视图模型表示您想要在视图/页面上显示的数据,无论是用于静态文本还是用于可以添加到数据库(或编辑)的输入值(如文本框和下拉列表)。它与您的领域模型有所不同。它是视图的模型。

所以,你应该创建一个新的类,作为你的其他对象的容器,在你的情况下,如:

public class NameOfTheviewViewModel {
    public App.Models.ValueForecast ValueForecast { get; set; }
    public App.Models.FacilityEditor FacilityEditor { get; set; }
    public App.Models.ForecastSub ForecastSub { get; set; }
}

然后使用这个类作为视图的模型:

@model NameOfTheviewViewModel
foreach(var item in Model.ValueForecast) //Or whatever your list are
{
     // do something
}

只需创建一个类(视图模型)来保存您需要的数据,并将您的3个不同领域类的数据映射到它(这可以手动完成或使用像AutoMapper这样的东西)。然后,您只需将该视图模型声明为视图的模型。

请注意,将你的域对象(poco)直接映射到你的视图是不理想的,因为你经常会将特定于表示的代码与数据访问层代码混合在一起。

将这些关注点分离到包含所有poco的数据层和表示层中。然后,当您需要显示这些数据时,创建一个ViewModel来在视图和控制器之间表示/传输这些数据。虽然代码有点多,但我觉得还是值得的。

相关文章: