2016-11-04 5 views
3

別のオブジェクト内にあるオブジェクトの値を表示しようとしています。私はこれを数日間書き直し、私がどこに間違っているのか理解しようとすると、それを見つけて死に至りました。私ははるかに複雑なプロジェクトから始めましたが、今では非常に単純な学校を例として使用し、さまざまなことを試してみました。私は、インターネットからの例に基づいて少なくとも30の異なる方法で構成を書き直しました。私の体をつかまえてくれたらどんな助けでも大歓迎です!データを正しくシードするか、何かを間違って実行していますか?

クラス:

public class Teacher 
{ 
    public int teacherID { get; set; } 
    public string name { get; set; } 
} 

public class Course 
{ 
    [Key] 
    public int ID { get; set; } 
    public string courseName { get; set; } 
    public int? teacherID { get; set; } 
    public Teacher teacher { get; set; } 
} 

public class schoolDBContext : DbContext 
{ 
    public DbSet<Course> Courses { get; set; } 
    public DbSet<Teacher> Teachers { get; set; } 
} 

構成:

protected override void Seed(school.Models.schoolDBContext context) 
     { 

     context.Courses.AddOrUpdate(i => i.ID, 
      new Course 
      { 
       courseName = "Math", 
       teacher = new Teacher { teacherID = 1, name = "Ms. Brooks" }, 
       teacherID = 1 
      }, 
      new Course 
      { 
       courseName = "Science", 
       teacher = new Teacher { teacherID = 2, name = "Ms. James" }, 
       teacherID = 2 
      }, 
      new Course 
      { 
       courseName = "History", 
       teacher = new Teacher { teacherID = 3, name = "Ms. Davidson"}, 
       teacherID = 3 
      } 
     ); 
    } 
} 

ビュー:私は先生の名前がで表示するために取得するにはどうすればよい

@model IEnumerable<school.Models.Course> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.courseName) 
     </th> 
     <th> 
     @Html.DisplayNameFor(model => model.teacher.name) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.courseName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.teacher.name) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | 
      @Html.ActionLink("Details", "Details", new { id=item.ID }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.ID }) 
     </td> 
    </tr> 
} 

</table> 

What the view looks like

コースビュー?

コントローラでこれを行うと、すべて正常に機能します。

public ActionResult Index() 
    { 
     var _coursesList = new List<Course>(); 
     _coursesList.Add(new Course { ID = 1, courseName = "English", teacherID = 1, teacher = new Teacher { teacherID = 1, name = "Mrs. Thomas" } }); 
     _coursesList.Add(new Course { ID = 2, courseName = "History", teacherID = 2, teacher = new Teacher { teacherID = 2, name = "Ms. Jones" } }); 
     _coursesList.Add(new Course { ID = 3, courseName = "Math", teacherID = 2, teacher = new Teacher { teacherID = 2, name = "Ms. Fisher" } }); 

     return View(_coursesList); 

     // return View(db.Courses.ToList()); 
    } 

Code Working

だから、右、私は問題であるデータを播種しています方法でなければなりませんか?

答えて

0

これらの行:ラムダで

<td> 
     @Html.DisplayFor(modelItem => item.courseName) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.teacher.name) 
    </td> 

:あなたは間違った項目をオフに引っ張っているよう

DisplayFor(modelItem => item.teacher.name) 

に見えます。

あなたの反復を作成しているかに基づいて、なぜあなたが使用していない、けれども:

@item.teacher.name 

の代わり:

@Html.DisplayFor(modelItem => item.teacher.name) 
+0

を私はに割り当てられた先生の名前をしたいですコースからの情報を取得することによってコース。あなたはコースのitem.teacher.name以外にどのように書きますか?また、コントローラでそれらを作成してそのように戻すと、正しく表示されるため、問題であるHTMLとは思えません。 @ Html.DisplayFor(modelItem => item.courseName)の代わりに@ item.teacher.nameを使用しない理由について質問したところ、答えの2番目の部分は理解できません。これらは私が試している2つの異なるものです表示する。 – Amanda

+0

@Amandaそれを残念に編集しました。ラムダ自体はさまざまなものを見ています。 'modelItem => item.teacher.name'では、ラムダはキャストされ、modelItem上で動作します。 itemはこの場合操作されている外部オブジェクトです – Dudemanword

+0

@ item.teacher.nameに変更するとnull参照例外が発生します – Amanda

関連する問題