【问题标题】:Building a Tree menu with recursion in MVC4 - which data structure to use?在 MVC4 中使用递归构建树菜单 - 使用哪种数据结构?
【发布时间】:2013-03-10 03:05:01
【问题描述】:

我正在使用 MVC4 构建一个处理 Box 的应用程序。一个 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
   }

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

【问题讨论】:

标签: c# asp.net-mvc


【解决方案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 code for this question*

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

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

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 2019-04-14
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多