【问题标题】:.Net MVC Passing Nested Data from Controller to View.Net MVC 将嵌套数据从控制器传递到视图
【发布时间】:2015-11-05 23:06:25
【问题描述】:

我正在创建一个 .NET MVC 应用程序,并且我有一个要在其中显示以下内容的视图:

类别

后跟当前类别的项目列表

[可能]后跟当前项目的子项目列表

我可以创建一个自定义 ViewModel 类,它发送 3 个单独的 IEnumerable 列表(类别、项目和子项目)。这种方法的问题是没有简单的方法可以在视图中以正确的顺序(层次结构)呈现数据。使用这种方法,我将拥有三个列表,然后需要在渲染期间添加条件逻辑。这意味着当我尝试将项目插入页面上的适当位置时,每个项目列表将被迭代多次。

我宁愿以正确的顺序传回数据,也许是一个 XML 文件。这里的正确方法是什么?

我也考虑过在控制器中连接数据并将格式化的文本传递给视图,但这似乎违反了让视图处理渲染的概念。

【问题讨论】:

    标签: asp.net-mvc nested hierarchical


    【解决方案1】:

    我会在这里远离 XML。通过适当的层次结构;这似乎是合理的:

    public class ViewModel
    {
        Category[] Categories { get; set; }
    }
    
    public class Category
    {
        Item[] Items { get; set; }
    }
    
    public class Item
    {
        Item[] SubItems { get; set; }
    }
    

    那么您可以在视图中嵌套foreach 循环。

    【讨论】:

    • 这似乎是丹尼斯的建议。感谢您的建议。
    【解决方案2】:

    您可能应该做的是在您的类别列表中添加一个自定义类型,并且每个项目都有一个包含子项目的属性。

    这可以在实体框架中轻松实现,使用Navigation Properites

    【讨论】:

      【解决方案3】:

      我将使用类型为 IEnumerable<item> 的 items 属性设置 Category Model 类。

      然后在item 类中包含IEnumerable<subItem> subItems 属性。

      视图会很容易地遍历这些项目和子项目。

      编辑:实际上,如果子项与项完全相同,那么可能只有一个具有IEnumerable<item> subItems 属性的item 类。这也将允许无限级别的子项目。

      【讨论】:

        猜你喜欢
        • 2013-05-23
        • 2016-01-30
        • 1970-01-01
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多