Отображение нескольких моделей в одном представлении с использованием частичных представлений

Мне нужно, чтобы отобразить данные из двух таблиц (студент и класс) в одном представлении index.cshtml.

У меня есть два частичных представления _StudentPartial и _GradePartial, оба строго типизированные. Я погуглил, и все говорят, что я должен использовать родительскую модель. Поэтому я создал родительскую модель под названием 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.DbQuery1[MyApp.Models.Students]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1 [MyApp.Models.MyBigViewModels]".

1 ответ

В вашем внешнем виде:

@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, когда вам нужен только один.

Другие вопросы по тегам