我正在创建一个.NET MVC应用程序,我有一个视图,我想在其中显示以下内容:
分类
后面是当前类别
的项列表[可能]后跟当前项目的子项目列表
我可以创建一个自定义的ViewModel类,它发送3个独立的IEnumerable列表(类别,项目和子项)。这种方法的问题在于没有简单的方法在视图中以正确的顺序(层次结构)呈现数据。使用这种方法,我将有三个列表,然后需要在渲染过程中添加条件逻辑。这意味着当我尝试将项目插入页面上的正确位置时,每个项目列表将被多次迭代。
我宁愿以正确的顺序传回数据,也许是作为XML文件。这里适当的方法是什么?
我还考虑将控制器中的数据连接起来并将格式化的文本传递给视图,但这似乎违反了视图句柄渲染的概念。
答案 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
属性。这也允许无限级别的子项。