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

1

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

У меня есть два частичных представления _StudentPartial & _GradePartial, которые строго типизированы. Я googled вокруг и все говорят что я родительская модель должна быть использована. Поэтому я создал родительскую модель под названием 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].

Теги:
asp.net-mvc-4
models

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню