Отображение нескольких моделей в одном представлении с использованием частичных представлений
Мне нужно, чтобы отобразить данные из двух таблиц (студент и класс) в одном представлении 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.DbQuery
1[MyApp.Models.Students]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [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, когда вам нужен только один.