ASP.NET MVC-显示项目列表,每个项目都有一个项目列表
本文关键字:项目 列表 有一个 显示 NET ASP MVC- | 更新日期: 2023-09-27 18:30:14
我希望这是最好的解释方式。。。
我有3个视图对象:学校、课程和班级。每一所学校都有多门课程,每门课程可以有多个班级(把一门课程想象成一个学习计划,班级就是实际的班级)。在我的主视图中,我显示所有学校,然后单击其中一个转到它。在"课程视图"页面上,它显示学校的名称以及与该学校相关的所有课程。我想做的是,也列出与每门课程相关的所有课程。这可能吗(如果没有大量的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", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SchoolId", 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->Business->Controller传递,例如:
学校管理员:
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>
首先不要将class用作变量,它是一个保留字,但不是类似于:
<%
foreach (var course in Model.Courses) {
foreach (var courseClass in course.Classes) {
%>
<tr>
<td><%: Html.DisplayFor(model => courseClass.ClassNumber) %></td>
</tr>
<%
}
}
%>
这个部分看起来不对:
foreach (var class in Model.Courses) {
%>
<tr>
<td><%: Html.DisplayFor(model => item.ClassNumber) %></td>
</tr>
<% }
您的Course类没有ClassNumber属性。你应该说Model.Courses.Classes
,并把它放在你的第一个循环中的某个地方,这样你就可以访问每门课程的Classes
此外,单词class
可能会引起问题,因为它是c#中的关键字
<%
foreach (var item in Model.Courses) {
%>
<tr>
<td><%: Html.DisplayFor(model => item.CourseCode) %></td>
<td><%: Html.DisplayFor(model => item.CourseName) %></td>
</tr>
<tr>
<td>Classes</td>
<td>
<% foreach (var class in item.Classes) { %>
-- list your classes here
<% } %>
</td>
</tr>
<% } %></tbody>