C# 一个视图中3个模型的视图模型

C# 一个视图中3个模型的视图模型,c#,asp.net-mvc-4,viewmodel,C#,Asp.net Mvc 4,Viewmodel,您好,我正在使用MVC4,我正在尝试使用viewmodel,以便我可以访问3个模型的数据 我想显示以下信息列表:(项目名称、供应商名称、供应商答案) 这是我的代码: public class Projects { [Key] public int ProjectId { get; set; } public string ProjectName { get; set; } public string Descriptions { get; set; } } pu

您好,我正在使用MVC4,我正在尝试使用viewmodel,以便我可以访问3个模型的数据

我想显示以下信息列表:(项目名称、供应商名称、供应商答案)

这是我的代码:

public class Projects
{
    [Key]
    public int ProjectId { get; set; }
    public string ProjectName { get; set; }
    public string Descriptions { get; set; }
}

public class SubmitedProjects
{
    [Key]
    public int ProjectId { get; set; }
    public int SupplierId { get; set; }
    public string SupplierAnswerr { get; set; 
}

public class Supplier
{
    [Key]
    public int SupplierId { get; set; }
    public string SupplierName { get; set; 
}
我的视图模型:

public class ModelInfo
  {
    public ProjectEntry oProjects { get; set; }
    public SubmittedProject oSubmitedProjects { get; set; }

  }
控制器:

    public ActionResult MProjects ( )
    {

       SubmittedProjectContext d = new SubmittedProjectContext();
       ProjectContext ds = new ProjectContext();
       List <ModelInfo> r = new List <ModelInfo>();
       ModelInfo rr = new ModelInfo();

         rr.oSubmitedProjects=new SubmittedProject();
         rr.oProjects=new Projects();
         r.Add(rr);
         return View(r);
    }
公共行动结果项目()
{
SubmittedProjectContext d=新的SubmittedProjectContext();
ProjectContext ds=新的ProjectContext();
列表r=新列表();
ModelInfo rr=新的ModelInfo();
rr.oSubmitedProjects=新提交的项目();
rr.oProjects=新项目();
r、 添加(rr);
返回视图(r);
}
我想显示以下信息列表:(项目名称、供应商名称、供应商答案)

然后,视图模型类应如下所示:

public class ProjectViewModel
{
    public string ProjectName { get; set; }
    public string SupplierName { get; set; }
    public string SupplierAnswer { get; set; }
}
如果需要在一个视图中使用多个项目:

public class MultipleProjectsViewModel
{
    public IList<ProjectViewModel> Projects { get; set; }
}
公共类多项目视图模型
{
公共IList项目{get;set;}
}
然后,在控制器中根据需要基于的任何信息建立视图模型


请记住,视图模型为视图建模。如果在视图中需要这些信息,请将这些属性放在视图模型中。视图模型不应直接绑定到域/业务实体。这是一个不同的东西,服务于不同的目的。养成将它们分开的习惯。

我会为该页面创建一个ViewModel,填充该ViewModel的属性并将其传递给视图

e、 g

在控制器中

ExampleViewModel evm = new ExampleViewModel();
evm.ProjectName = "Name";
evm.SupplierName = "Supplier";
evm.SupplierAnswer = "Answer";
return View(evm);

你的问题是什么?你想查看这三个类的数据,对吗?是的,所有这些都在一个视图中为什么多项目视图模型。。。?我不明白?!我需要在SubmitedProjectsContext中显示所有提交的项目。你能告诉我控制器的外观吗?不,我不能,因为我不知道你的逻辑是什么。您只需要实例化一个新的视图模型(上面的一个类)并基于数据库中的对象构建信息,然后将视图模型传递给视图。试着在谷歌上搜索“asp.net mvc中的视图模型”。重点是,你不需要将对象从数据库传递到视图,而是创建视图模型对象并使用它们。请参阅下面的内容。。。为什么不在解决方案中使用我的类…我知道我们使用viewmodel将两个或更多类集成在一起?!看我的尝试..我试过了!我在使用课堂。上面的东西是课堂。您不能使用视图模型将数据实体捆绑在一起,它们应该完全独立于您的EF实体(即,不引用它们),并且它们应该只包含视图所需的信息。如果该信息来自EF实体,这很好,但它不应该是EF实体。我不知道我可以用多少种不同的方式来表达这一点,但是,我想你需要做的是阅读视图模型以及它们被使用的原因。这可能是正确的方法。我想您可以使用automapper来处理所有映射。假设这些类是您的实体(来自EF或其他ORM)您只需加载这些实体中的数据,并使用实体中的属性实例化ViewModel属性,如
evm.ProjectName=projects.ProjectName
mmm好的,我会尝试只传递一个项目…如何列出所有项目?将列表传递给视图,您需要将视图顶部的
@model ExampleViewModel
更改为
@model System.Collections.Generic.List
@model System.Collections.Generic.ICollection
,在那之后,你可以在视图中遍历列表好的,我也用@model list得到了这个结果……但是现在用你的代码我们创建了一个新的……我不想创建新的……我想把它们列出来,因为我的数据库中有它们。。!?
ExampleViewModel evm = new ExampleViewModel();
evm.ProjectName = "Name";
evm.SupplierName = "Supplier";
evm.SupplierAnswer = "Answer";
return View(evm);