我正在使用处理Boxes的MVC4构建一个应用程序。一个盒子可以包含许多盒子,可能包含一个盒子。菜单应如下所示:
> Box 1
> Box 2
> Box 2.A
> Box 2.B
> Box 2.C
> Box 2.C.1
> Box 2.D
> Box 3
现在我有以下内容:
public object GetTree(Box? box){
foreach (var box in box.Boxes)
{
GetTree(box)
// append menu item with box.name, box.id pair so a link can get generated
}
我有点卡住了。菜单将作为对象传递给客户端,客户端将以某种方式将其显示为链接的树状菜单。这里最合适的数据结构是什么?
答案 0 :(得分:1)
所以这里是关于递归的。你已经开始实现这种方式了,所以这很好。
首先要做的事情。数据结构。要表示树状菜单,您应该像喜欢的对象一样构建树,因此您必须创建它们的简单图形。你开始很好。你有一个Box
对象。让我们来加强它。创建一个具有List of Boxes的BoxNode
对象,如下所示:
public class BoxNode
{
public List<Box> BoxChildren
{
get; set;
}
}
然后Box
:
public class Box
{
public string Name
{
get; set;
}
public BoxNode BoxNode
{
get; set;
}
}
所以现在我们有了基本的数据结构,让我们转到函数:
public static void CreateMenuTree(BoxNode boxNode, string indent)
{
foreach (Box box in boxNode.BoxChildren)
{
Console.WriteLine(indent + box.Name);
if (box.BoxNode != null && box.BoxNode.BoxChildren != null && box.BoxNode.BoxChildren.Count > 0)
{
CreateMenuTree(box.BoxNode, indent + indent);
}
}
}
在这里,我还创建了一个完全可行的代码:Gist code for this question *
请注意,对于MVC场景,你当然用适当的url链接生成替换Console.WriteLine并用某种CSS类缩进。但我想你应该明白这一点。
*请注意,这不是生产代码,而是DEMO代码。