.Net MVC将嵌套数据从Controller传递到View

时间:2009-05-21 17:21:28

标签: asp.net-mvc nested hierarchical

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

分类

后面是当前类别

列表

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

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

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

我还考虑将控制器中的数据连接起来并将格式化的文本传递给视图,但这似乎违反了视图句柄渲染的概念。

3 个答案:

答案 0 :(得分:3)

我会在这里远离XML。通过适当的等级;这似乎是合理的:

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

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

public class Item
{
    Item[] SubItems { get; set; }
}

然后你可以在视图中嵌套foreach循环。

答案 1 :(得分:0)

您应该做的是使用自定义类型和您的类别列表,每个项目都有一个包含子项目的属性。

使用Navigation Properites可以在Entity Framework中轻松实现。

答案 2 :(得分:0)

我会设置Category Model类,其item属性为IEnumerable<item>

然后在IEnumerable<subItem> subItems类上添加item属性。

视图将非常容易地遍历这些项目和子项目。

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