我将下面的代码用作 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;
}