1

モジュールを作成しようとしています。そのメニュー管理モジュールは、メニューとサブメニューをいくつでも作成できます。しかし、今私のモジュールでは、メニューの深さを 3 つまでにすることができます。これは、私のモジュールがルート メニューとその子、および子の子を最大でサポートすることを意味しますが、無限にネストされたサブ メニューを作成するアルゴリズムとその方法について考えています。つまり、ユーザーが無限にネストされたサブメニューを自由に作成できるようにしたいということです。目標を達成するためにモデルとデータベースをどのように設定すればよいかわかりません。MVC3 と C# とエンティティ フレームワークを使用しています。ありがとう。

4

2 に答える 2

7

データモデルに関しては、次のものが可能です。

  • ID
  • メニューテキスト
  • URL
  • 親ID

最上位のメニュー項目の場合、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;
}
于 2013-03-27T19:24:33.843 に答える