ASP.NET MVC – 显示每个项目列表的项目列表

我希望这是解释这个的最佳方式……

我有3个视图对象:学校,课程和课程。 每所学校都有多门课程,每门课程可以有多个课程(将课程视为学习课程,课程为实际课程)。 在我的主视图中,我显示所有学校,然后单击一个以进入它。 在“CourseView”页面上,它显示学校的名称以及与该学校相关的所有课程。 我正在尝试做的,也列出了与列出的每门课程相关的所有课程。 这可能吗(没有大量的jQuery / JSON魔法,我还在学习)?

public class School { public int Id { get; set; } public string SchoolName { get; set; } public string WelcomeMsg { get; set; } public string SchoolLogo { get; set; } public List Courses { get; set; } } public class Course { public int Id { get; set; } public string CourseCode { get; set; } public string CourseName { get; set; } public int SchoolId { get; set; } public List Classes { get; set; } } public class Class { public int Id { get; set; } public string ClassNumer { get; set; } public int CourseId { get; set; } public int InstructorId { get; set; } } 

在我的SchoolDAO.cs中,我有以下内容:

  { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@SchoolId", SchoolId); using (SqlDataReader dr = cmd.ExecuteReader()) { if (dr.Read()) { // fill school object in another method. school = readRecord(dr); } } // Get all courses available for this school. school.Courses = CoursesDAO.GetCourses(SchoolId); return school; } 

这也调用了CourseDAO.cs中的一个方法来获得该学校的课程:

  { SqlCommand cmd = new SqlCommand("Courses.GetCourses", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@SchoolId", SchoolId); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { courses.Add(readRecord(dr)); } } // Get all classes available for each course. foreach (var course in courses) { course.Classes = ClassDAO.GetClasses(course.Id); } return courses; } 

然后调用ClassDAO方法获取每个课程的所有类:

  { SqlCommand cmd = new SqlCommand("Courses.GetCourses", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@SchoolId", courseId); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { classes.Add(readRecord(dr)); } } return classes; } 

最后,我的问题是:如何在模型中显示视图中的学校,课程和class级列表?

我的视图有以下内容,显示我正在查看的学校以及该学校的课程列表:

 

Course Code Course Name
item.CourseCode) %> item.CourseName) %>

在那个表之后,我想把另一个表id =“classes”,但遗憾的是当我尝试这样做时:

     item.ClassNumber) %>   

它不起作用 – 我假设因为我要么不知道如何访问属于列表的列表,要么因为这不是模型的工作方式。

对此的任何见解都将受到极大的赞赏。 谢谢!

PS – 通过简单的方法从DAO – > Business – > Controller传递信息,例如:

SchoolController:

  public ActionResult ViewSchool(int Id) { School school = SchoolBusiness.GetSchool(Id); return View(school); } 

SchoolBusiness.GetSchool:

  public static School GetSchool(int Id) { School school = SchoolDAO.GetSchool(Id); return school; } 

您需要在迭代它时引用每个课程并获取课程列表。 为此,请嵌套foreach语句。

我将HTML更改为简单列表,因为我认为它更容易理解。 如果这是你想要的,它应该很简单,可以更改为嵌套表。

  
    <% foreach (var course in Model.Courses) { %>
  • <%: Html.DisplayFor(model => course.CourseCode) %> <%: Html.DisplayFor(model => course.CourseName) %>
      <% foreach (var class in course.Classes) { %>
    • <%: Html.DisplayFor(model => class.ClassNumber) %>
    • <% } %>
  • <% } %>

首先不要使用class作为变量,它是一个保留字,但它不是这样的:

 <% foreach (var course in Model.Courses) { foreach (var courseClass in course.Classes) { %>  <%: Html.DisplayFor(model => courseClass.ClassNumber) %>  <% } } %> 

这部分看起来不正确:

  foreach (var class in Model.Courses) { %>  <%: Html.DisplayFor(model => item.ClassNumber) %>  <% } 

您的课程类没有ClassNumber属性。您应该说Model.Courses.Classes ,并将其放在您的第一个循环中,以便您可以访问每个课程的类。
word class也可能导致问题,因为它是c#中的关键字

  <% foreach (var item in Model.Courses) { %>  <%: Html.DisplayFor(model => item.CourseCode) %> <%: Html.DisplayFor(model => item.CourseName) %>   Classes  <% foreach (var class in item.Classes) { %> -- list your classes here <% } %>   <% } %>