如何创建无限嵌套子菜单?

Ham*_*eza 1 c# entity-framework asp.net-mvc-3

我正在尝试编写一个module.Its菜单管理模块,你可以创建菜单和子菜单你想要多少.但现在在我的模块中你的菜单深度可以是三个.这意味着我的模块支持一个根菜单和它的子节点以及最大的子节点,但我正在考虑创建无限嵌套子菜单的算法以及如何在网站上显示它们.我的意思是我想让用户自由创建无限的嵌套子菜单.我不知道我的模型和数据库应该如何设置以实现我的目标.我正在使用MVC3和C#以及实体框架.谢谢.

Rob*_*Rob 7

就数据模型而言,您可以:

  • ID
  • MenuText
  • 网址
  • 的ParentId

对于顶级菜单项,ParentId将为NULL.否则,它指向父母.

大多数UI菜单(如Superfish.js)使用<ul><li>元素来呈现菜单.只需遍历数据库中的菜单项即可构建<ul>结构.

这是一个开始:

private void BuildMenu()
{
    List<MenuItem> menuItems = GetTopLevelMenuItems();

    string html = "<ul>";

    foreach (var menuItem in menuItems)
    {
        html += BuildMenuSubMenu(menuItem);
    }
    html += "</ul>"
}

private string BuildMenuSubMenu(MenuItem menuItem)
{
    string html = string.Empty;

    List<MenuItem> childItems = GetChildItems(menuItem);

    html += string.Format("<li><a href=\"{0}\">{1}</a>", menuItem.Url, menuItem.MenuText);

    if (childItems.Count > 0)
    {
        html += "<ul>";
        foreach (var child in childItems)
        {
            html += BuildMenuSubMenu(child);
        }
        html += "<ul>";
    }

    html += "<li>";

    return html;
}
Run Code Online (Sandbox Code Playgroud)