【问题标题】:How to create common menu control for ASP.NET and ASP.NET MVC?如何为 ASP.NET 和 ASP.NET MVC 创建通用菜单控件?
【发布时间】:2011-04-04 15:37:09
【问题描述】:

我已将 ASP.NET 和 ASP.NET MVC 集成在一个项目中一起工作。在这里我必须使用一些共同的控件,例如:菜单控件。这些菜单必须从数据库中动态填充。是否可以在 jQuery 的帮助下通过从数据库中填充详细信息来在 div 中创建菜单?

如何为 ASP.NET 和 ASP.NET MVC 创建通用菜单控件?任何建议将不胜感激。

【问题讨论】:

    标签: jquery asp.net asp.net-mvc


    【解决方案1】:
    • 从服务器获取数据。
    • 将数据转换为 JSON 格式
    • 获取 jQuery 获取 JSON 数据。
    • 使用客户端模板来呈现您的菜单。

    【讨论】:

      【解决方案2】:

      最近我转向了 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 并将您的页面插入其中。希望对您有所帮助!

      【讨论】:

        【解决方案3】:

        你看过带有菜单的 TreeView 吗?

        【讨论】:

        • 我可以在 ASP.NET 和 ASP.NET MVC 中使用带有菜单的树形视图吗?如何将数据库中的数据绑定到这个菜单??
        猜你喜欢
        • 1970-01-01
        • 2011-04-27
        • 2010-11-18
        • 2013-09-05
        • 2012-10-31
        • 2010-12-02
        • 1970-01-01
        • 2011-12-08
        • 2011-11-14
        相关资源
        最近更新 更多