以下のコードを、データベースからデータを取得し、それをループしてメニューを表示する HTMLHelper として使用します。ご覧のとおり、これは非常に簡単ですが、階層の隣接モデル (ID、ParentID、OrderID など) を使用するデータベース テーブルがある場合はどうなるでしょうか。何が起こっているかを簡単に確認できますが、このデータを適切に取り出すには再帰が必要です。C# 再帰関数の記述は許容されますか? もしそうなら、誰かがそれで私を助けることができますか? 予想される出力は、これに似たものです..
<ul>
<li>Item1
<ul>
<li>SubItem1</li>
</ul>
</li>
</ul>
SQL 2008 には Hierarchy データ型が追加されましたが、これが役立つかどうかはわかりません。
また、ユーザーがメニューに何を入れるかを決定できるようにする方法も必要です。たとえば、メニューに入れることができるアイテムのリストを作成し、これらのアイテムとその階層内の位置を選択します。保存されたボタンが押されると、この階層がデータベースに保存されます。
私はあまりにも多くのことを尋ねていますが、これは非常に一般的なシナリオであるに違いないと確信していますか?
誰かがそれを使いたいなら、これが私のHTMLHelperコードです...
public static string Menu(this HtmlHelper helper, int MenuCat)
{
string menuHTML = "<ul id=\"menu\">";
var route = helper.ViewContext.RequestContext.RouteData;
string currentPageName = route.GetRequiredString("id");
DB db = DB.CreateDB();
//var result = from p in db.WebPages where p.CategoryID == 9 select p;
var result = from p in db.WebPages select p;
foreach (var item in result)
{
if (item.Name == currentPageName)
{
menuHTML += "\n\t<li>" + helper.ActionLink(item.Name, "Details", "Dinner", new { id = item.ID }, new { @class = "selected" }) + "</li>";
}
else
{
menuHTML += "\n\t<li>" + helper.ActionLink(item.Name, "Details", "Dinner", new { id = item.ID }, null) + "</li>";
}
}
menuHTML += "\n</ul>\n";
return menuHTML;
}