1

我正在使用 MVC4 构建一个处理 Boxes 的应用程序。一个 Box 可以包含多个 Box,并且可能包含一个 Box。菜单应如下所示:

> 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
   }

我有点卡住了。菜单将作为对象传递给客户端,客户端将以某种方式将其显示为链接的树形菜单。什么数据结构在这里最合适?

4

1 回答 1

1

这是关于递归和正确数据结构的全部内容。

所以这里都是关于递归的。您已经开始实施这种方式,所以这很好。

第一件事。数据结构。要表示树状菜单,您应该构建树状喜欢的对象,因此您必须创建它们的简单图形。你开始得很好。你有一个Box对象。现在让我们增强它。创建一个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 代码*

请注意,对于 MVC 场景,您当然将 Console.WriteLine 替换为正确的 url 链接生成,并使用某种 CSS 类进行缩进。但我想你应该明白这一点。

*请注意,这不是生产代码,而是演示代码。

于 2013-03-10T10:04:34.277 回答