加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:09:04 所属栏目:百科 来源:网络整理
导读:我希望这是解释这个的最佳方式…… 我有3个视图对象:学校,课程和课程.每所学校都有多门课程,每门课程可以有多个课程(将课程视为学习课程,课程为实际课程).在我的主视图中,我显示所有学校,然后单击一个以进入它.在“CourseView”页面上,它显示学校的名称以及
我希望这是解释这个的最佳方式……

我有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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读