c# – 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<Course> 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<Class> 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",courseId); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { classes.Add(readRecord(dr)); } } return classes; } 最后,我的问题是:如何在模型中显示视图中的学校,课程和班级列表? 我的视图有以下内容,显示我正在查看的学校以及该学校的课程列表: <div class="display-field"> <h1><%: Model.SchoolName %></h1> <h3><%: Model.WelcomeTitle %></h3> <blockquote> <i><%: Model.WelcomeText %></i></blockquote> </div> <!-- Courses --> <div class="display-field"> <table id="courses"> <thead> <th>Course Code</th> <th>Course Name</th> </thead> <tbody> <% foreach (var item in Model.Courses) { %> <tr> <td><%: Html.DisplayFor(model => item.CourseCode) %></td> <td><%: Html.DisplayFor(model => item.CourseName) %></td> </tr> <% } %></tbody> </table> </div> 在那个表之后,我想把另一个表id =“classes”,但遗憾的是当我尝试这样做时: <% foreach (var class in Model.Courses) { %> <tr> <td><%: Html.DisplayFor(model => item.ClassNumber) %></td> </tr> <% } %> 它不起作用 – 我假设因为我要么不知道如何访问属于列表的列表,要么因为这不是模型的工作方式. 对此的任何见解都将受到极大的赞赏.谢谢! PS – 信息从DAO传递 – >业务 – >控制器通过简单的方法,例如: 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更改为简单列表,因为我认为它更容易理解.如果这是您想要的,那么更改为嵌套表应该很简单. <!-- Courses --> <ul> <% foreach (var course in Model.Courses) { %> <li> <%: Html.DisplayFor(model => course.CourseCode) %> <%: Html.DisplayFor(model => course.CourseName) %> <!-- Classes --> <ul> <% foreach (var class in course.Classes) { %> <li><%: Html.DisplayFor(model => class.ClassNumber) %></li> <% } %> </ul> </li> <% } %> </ul> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |