0

Contoso University ASP.NET MVC の例のパート 5 を見ていきます。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-応用

インストラクターが教えたコースを選択したときに、idパラメーターがコントローラー/ビューにどのように渡されたかがよくわかりません。ビューでは、コースを表示するセクションは次のとおりです。

@if (Model.Courses != null) 
{ 
   <h3>Courses Taught by Selected Instructor</h3> 
<table> 
<tr> 
    <th></th> 
    <th>ID</th> 
    <th>Title</th> 
    <th>Department</th> 
</tr> 

@foreach (var item in Model.Courses) 
{ 
    string selectedRow = ""; 
    if (item.CourseID == ViewBag.CourseID) 
    { 
        selectedRow = "selectedrow"; 
    } 
<tr class="@selectedRow"> 
    <td> 
        *@Html.ActionLink("Select", "Index", new { courseID = item.CourseID })*
    </td> 
    <td> 
        @item.CourseID 
    </td> 
    <td> 
        @item.Title 
    </td> 
    <td> 
        @item.Department.Name 
    </td> 
</tr> 
} 

</table> 

}

コントローラ インデックス機能は次のとおりです。

public ActionResult Index(int? id, int? courseID)
    {
        var viewModel = new InstructorIndexData();
        viewModel.Instructors = db.Instructors.Include(r => r.OfficeAssignment)
            .Include(r => r.Courses.Select(c => c.Department))
            .OrderBy(i => i.LastName);

        if (id != null)
        {
            ViewBag.InstructorID = id.Value;
            viewModel.Courses = viewModel.Instructors.Where(
                i => i.InstructorID == id.Value).Single().Courses;
        }

        if (courseID != null)
        {
            ViewBag.Courses = courseID.Value;
            //eager loading
            //viewModel.Enrollments = viewModel.Courses.Where(
            //    i => i.CourseID == courseID.Value).Single().Enrollments;

            //equivalant, but explicit loading
            var selectedCourse = viewModel.Courses.Where(x => x.CourseID == courseID).Single();
            db.Entry(selectedCourse).Collection(x => x.Enrollments).Load();
            foreach (Enrollment enrollment in selectedCourse.Enrollments)
            {
                db.Entry(enrollment).Reference(x => x.Student).Load();
            }

            viewModel.Enrollments = selectedCourse.Enrollments;
        }

        return View(viewModel);
    }

** ビューの行では、次のように id を渡す必要がないのはなぜですか。

@Html.ActionLink("Select", "Index", new { id= ViewBag.InstructorID,courseID = item.CourseID }) 

ありがとう!

4

1 に答える 1