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