【发布时间】:2011-04-04 15:37:09
【问题描述】:
我已将 ASP.NET 和 ASP.NET MVC 集成在一个项目中一起工作。在这里我必须使用一些共同的控件,例如:菜单控件。这些菜单必须从数据库中动态填充。是否可以在 jQuery 的帮助下通过从数据库中填充详细信息来在 div 中创建菜单?
如何为 ASP.NET 和 ASP.NET MVC 创建通用菜单控件?任何建议将不胜感激。
【问题讨论】:
标签: jquery asp.net asp.net-mvc
我已将 ASP.NET 和 ASP.NET MVC 集成在一个项目中一起工作。在这里我必须使用一些共同的控件,例如:菜单控件。这些菜单必须从数据库中动态填充。是否可以在 jQuery 的帮助下通过从数据库中填充详细信息来在 div 中创建菜单?
如何为 ASP.NET 和 ASP.NET MVC 创建通用菜单控件?任何建议将不胜感激。
【问题讨论】:
标签: jquery asp.net asp.net-mvc
【讨论】:
最近我转向了 ASP.NET MVC,我也对如何创建菜单感兴趣。我只找到了 1 个合适的帮助 (http://www.asp.net/mvc/tutorials/providing-website-navigation-with-sitemaps-cs)。本教程使用 Web.sitemap 创建菜单。 但如果您尝试使用此帮助创建菜单,您会发现它不适合“更多级别”菜单。因此我修改了这段代码并创建了这个。
using System.Text;
using System.Web;
using System.Web.Mvc;
public static class MenuHelper
{
public static MvcHtmlString Menu(this HtmlHelper helper)
{
var sb = new StringBuilder();
sb.Append("<div id='menu'><ul>");
var topLevelNodes = SiteMap.RootNode.ChildNodes;
foreach (SiteMapNode node in topLevelNodes)
{
sb.AppendLine(SiteMap.CurrentNode == node ? "<li class='selectedMenuItem'>" : "<li>");
sb.AppendFormat("<a href='{0}'>{1}</a>", node.Url, helper.Encode(node.Title));
BuildMenu(sb, node);
sb.AppendLine("</li>");
}
sb.AppendLine("</ul></div>");
return MvcHtmlString.Create(sb.ToString());
}
private static StringBuilder BuildMenu(StringBuilder sb, SiteMapNode node)
{
if (node.ChildNodes.Count != 0)
{
sb.Append("<ul>");
foreach (SiteMapNode childNode in node.ChildNodes)
{
sb.AppendLine(SiteMap.CurrentNode == childNode ? "<li class='selectedMenuItem'>" : "<li>");
sb.AppendFormat("<a href='{0}'>{1}</a>", childNode.Url, childNode.Title);
BuildMenu(sb, childNode);
sb.AppendLine("</li>");
}
sb.AppendLine("</ul>");
}
return sb;
}
}
在视图中你只写@Html.Menu()。 记得创建 Web.sitemap 并将您的页面插入其中。希望对您有所帮助!
【讨论】:
你看过带有菜单的 TreeView 吗?
【讨论】: