ASP.NET MVC - 显示项目列表,每个项目都有一个项目列表

2024-03-02

我希望这是解释这一点的最好方式......

我有 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC - 显示项目列表,每个项目都有一个项目列表 的相关文章

  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 在外部单击时关闭弹出 div

    我有一个弹出 div 仅在单击特定按钮时显示 单击同一按钮时它甚至会隐藏 我的问题是 我还想在单击外部任何地方时隐藏 div 我无法这样做 因为弹出 div 位于主包装类内部 并且无法通过在包装类上使用 click 事件并使其隐藏来做到这一
  • 编译器消息“警告:格式‘%s’需要类型‘char *’,但参数 2 具有类型‘char (*)’”

    我正在尝试运行一个简单的 C 程序 但收到此错误 警告 格式 s 需要类型 char 但参数 2 的类型为 char 20 我在跑步Mac OS X v10 8 https en wikipedia org wiki OS X Mounta
  • 使用左连接获得不适当的输出

    我正在尝试获取变体列表 并且对于每个变体都获取所有subvariants list无论子变体属于何处 特别的Test say 100 这是示例数据 Id TestId SourceSubVariantId TargetSubVariantI
  • 优化正则表达式以过滤数千个 HTML 选择选项

    背景 我开发了一个基于 jQuery 的穿梭小部件 https stackoverflow com a 13557000 59087对于 HTMLselect元素 因为我找不到一个经过最低限度编码并提供正则表达式过滤器来补偿的元素变音符号
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • 为什么最小的 int -2147483648 的类型为“long”? [复制]

    这个问题在这里已经有答案了 对于一个学校项目 我必须编写 C 函数 printf 的代码 一切进展顺利 但有一个问题我找不到好的答案 所以我来了 printf PRINTF d t d n 2147483648 告诉我 gcc Werror
  • “DeploymentItem”属性是什么意思?

    假设我们有一个简短的程序 namespace ConsoleTryIt static class Program static void Main string args var sum Add 1 2 private static int
  • 加载 Ember.View 的内容后初始化 jQuery 插件

    DEBUG Ember VERSION 1 0 0 rc 6 ember js DEBUG Handlebars VERSION 1 0 0 rc 4 ember js DEBUG jQuery VERSION 1 9 1 控制器是一个Em
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • 如何解决 boost::multi precision::cpp_dec_float 除法错误

    除以boost multiprecision cpp dec float有某种舍入误差 如下 include
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • jQuery fadeOut 一个 div,fadeIn 另一个 div 在其位置

    我正在尝试一个简单的 jQuery 脚本来淡出一个 div 并淡入另一个 div 但由于某种原因 第一个 div 永远不会淡出 这可能是代码的一个明显问题 但我似乎无法弄清楚 div div div div
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 我无法使用 jQuery 和 abort() 函数停止 ajax 请求

    我的 jQuery 如下 var x ajax dataType jsonp url https ajax googleapis com ajax services search images q google v 1 0 success
  • MVC ASP.NET 或 Razor

    我对 MVC 很陌生 我对 Silver light WPF 和 MVVM 有相当多的了解 但对 MVC 知之甚少 我正在按照 Microsoft 网站上的主要教程进行操作http www asp net mvc tutorials get

随机推荐

  • 检查列表中是否存在值为 x 的namedtuple

    我想查看列表中是否存在命名元组 类似于 numbers 1 2 3 4 5 if 1 in numbers do stuff 有没有Pythonic 或没有 的方法来做到这一点 就像是 namedtuples namedtuple 1 na
  • NSURL 中的 CGImage 有效,但 UIImage 中无效

    我在对图像应用滤镜时遇到一些问题 使用 CIImage imageWithContentsOfURL 时 以下代码完美运行 NSInteger filterIndex UITapGestureRecognizer sender view t
  • 更改画布中像素的颜色、Tkinter、Python

    有人知道是否可以在不使用 un 对象的情况下更改画布中像素的颜色 因此无需使用类似的东西canvas create oval or canvas create rectangle 除了创建某种 1x1 像素对象之外 没有其他方法可以为像素着
  • 错误:在初始化尝试调用方法“值”之前无法调用滑块上的方法

    我写了类似下面的东西 id为 PLUS I的div的onclick 我收到以下错误 cannot call methods on slider prior to initialization attempted to call method
  • 使用 mpi4py 接收多个发送命令

    如何修改以下代码 改编自http materials jeremybejarano com MPIwithPython pointToPoint html http materials jeremybejarano com MPIwithP
  • matlab中传递和保存匿名函数

    我想要一个函数 例如 一个 fit 函数 返回一个匿名函数 通常存储在struct 我可以保存并稍后使用 然而 路过 func倾向于传递函数指针而不是函数本身 是一个inline函数是做到这一点的唯一方法吗 我想避免inline因为它非常慢
  • Django 选择字段

    我正在尝试解决以下问题 我的网页只能看到版主 此页面显示的字段 用户注册后 用户名 名字 姓氏 电子邮件 状态 相关性等 我需要显示带有此字段的数据库中存储的所有用户信息的表 但其中两个字段有选择 所以我想做出一个选项 版主可以选择另一个选
  • 简单地将 OpenMp Parallel for 转换为 c# Parallel for

    你好 我正在将这个 c openmp 并行转换为 c 并行 但它说 错误 1 并非所有代码路径都返回 lambda 表达式类型的值 System Func
  • 测试pdo的php代码可用吗?

    我想用PDO http php net manual en book pdo php但我不确定我的主机是否已正确设置 我如何在 PHP 中测试它是否已设置并适用于 MySQL php 5 1 始终安装 PDO 您可以使用 phpinfo 检
  • 扩展方法需要将类声明为静态

    为什么扩展方法要求声明类是静态的 这是编译器的要求吗 它在 C 4 规范的语言规范第 10 6 9 节中规定 当方法的第一个参数 包括 this 修饰符 即 方法被认为是一个扩展 方法 扩展方法只能是 以非泛型 非嵌套方式声明 静态类 第一
  • Three.js:有没有办法获取组的边界框

    我可以为 Threejs js 中的组获取 边界框吗 我在 Three js 中有一个对象列表 我将它们全部分组在一个单元中 我想获取组的高度和宽度 所以我尝试使用 Box3 来确定高度和宽度 有什么方法可以获取 Threejs 中对象组的
  • 在 Rails 集成规范中向同一控制器发出两个请求

    我在 Rails 集成测试中使用 rspec 向同一个 url 发出两个请求时遇到问题 it does something do get something status gt any other header lt lt lt lt lt
  • 如何在 Bash 中通过curl从谷歌驱动器下载大文件?

    我想制作一个非常简单的 bash 脚本 用于通过 google 驱动器下载文件Drive API 所以在这种情况下 谷歌驱动器上有一个大文件 我安装了OAuth 2 0 Playground在我的谷歌驱动器帐户上 然后在Select the
  • 是否有某些情况下 SIGKILL 不起作用?

    是否存在在 Linux 上运行的应用程序未阻止信号的情况SIGKILL 不会被射击杀死SIGKILL signal SIGKILL无法被阻止或忽略 SIGSTOP也不可以 如果进程在系统调用 内部 被阻塞 等待 I O 就是一个例子 等待失
  • 你如何优化你的Javascript?

    嗯 简单的问题 对吧 但没有那么简单的答案 在 Firefox 中 我使用 Firebug 控制台 配置文件 但是 在其他浏览器中该怎么办 像 Internet Explorer Opera Safari 在 Windows 上 随着时间的
  • 如何生成包含 R 中数据帧数据的 QR 码?

    我有一个实验室分析仪 可以生成 csv 或 xlsx 格式的结果 但现在我必须手动将输出结果手动输入到我们的结果跟踪软件系统中 因为复制粘贴不起作用 我想编写一个 R 脚本 可以将 csv 的结果转换为软件程序 我能想到的最好方法是将结果生
  • exec*() 后内存使用情况会发生什么

    C 父程序进行一些处理并分配内存 然后调用 execvp 所有已分配但未释放的内存会发生什么 它是自动释放还是作为垃圾保留 exec 用新程序完全替换了旧进程的内存 这包括所有分配的内存 因此不会留下任何垃圾 但请注意 文件描述符等其他资源
  • 如何理解Haskell中的“柯里化”?

    假设有一个名为 smallerc 的函数 smallerc Integer gt Integer gt Integer smallerc x y if x lt y then x else y 为什么不使用以下方式声明该函数 smaller
  • gcloud 应用程序部署“--appyaml”标志似乎不起作用

    对于 Google App Engine 我想注入env variables进入我的app yaml部署后 在文档中gcloud app deploy 我看到有标志 appyaml这将 使用特定的 app yaml 进行部署 该 app y
  • ASP.NET MVC - 显示项目列表,每个项目都有一个项目列表

    我希望这是解释这一点的最好方式 我有 3 个视图对象 学校 课程和班级 每所学校都有多个课程 每个课程可以有多个班级 将一门课程视为一个学习计划 班级是实际的班级 在我的主视图中 我显示所有学校 然后单击一所学校即可转到它 在该 课程视图