1

2 つのテーブル (学生と学年) のデータを 1 つのビュー index.cshtml に表示する必要があります。

2 つの部分ビュー _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.IEnumerable1[MyApp.Models.MyBigViewModels]' 型です。

4

1 に答える 1

2

in your outer view:

@foreach (var item in Model)

doesn't make sense. Your model is not enumerable. You want :

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

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

and your partials would just take a single item:

@model MyApp.Models.Student

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

either that, or don't loop in your main page, and send the enumerables into your partials to loop. Essentially you have 2 foreach's when you only need one.

于 2014-07-25T20:01:20.880 に答える