使用部分视图在单个视图中显示多个模型

时间:2014-07-25 19:53:54

标签: c# asp.net-mvc-4 models partialviews

我需要在单个视图index.cshtml中显示来自两个表(学生和成绩)的数据。

我有两个部分观点_StudentPartial& _GradePartial都是强类型的。我google了一下,每个人都说应该使用我的父模型。所以我在下面创建了一个名为MyViewModels的父模型,但我似乎无法使其工作。这样做的正确方法是什么?

我的模特:

public class MyBigViewModels{
      public IEnumerable<Users.Models.Student> Student      { get; set; }
      public IEnumerable<Users.Models.Grade>   Grade       { get; set; }
}

我的观点():

@model MyApp.Models.MyBigViewModels

// render content for Student 
@foreach (var item in Model)
{
  @Html.Partial("_StudentPartial", item)
}

// Render content for Grades
@foreach (var item in Model)
{
  @Html.Partial("_GradePartial", item)
}

我的部分观点

// _StudentPartial 
@model IEnumerable<MyApp.Models.Student>

@foreach (var item in Model) {
 @Html.DisplayFor(modelItem => item.name)
}


 // _GradePartial
@model IEnumerable<MyApp.Models.Grade>

@foreach (var item in Model) {
 @Html.DisplayFor(modelItem => item.letterGrade)
}
应用程序中的服务器错误

  

传递到字典中的模型项是类型的   'System.Data.Entity.Infrastructure.DbQuery 1[MyApp.Models.Students]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [MyApp.Models.MyBigViewModels]'。

1 个答案:

答案 0 :(得分:2)

外部视图中的

@foreach (var item in Model)

没有意义。您的模型不可枚举。你想要:

@foreach (var item in Model.Students)
{
   @Html.Partial("_StudentPartial", item)
}

// Render content for Grades
@foreach (var item in Model.Grades)
{
   @Html.Partial("_GradePartial", item)
} 

你的部分只需要一个项目:

@model MyApp.Models.Student

@Html.DisplayFor(modelItem => item.name)

要么在主页面中循环,要么不在主页面中循环,并将可枚举内容发送到部分循环中。基本上,当你只需要一个时,你就有2个foreach。