【问题标题】:What is the best menu for an ASP.Net application?ASP.Net 应用程序的最佳菜单是什么?
【发布时间】:2010-09-30 05:15:12
【问题描述】:

您发现什么可以为 ASP.Net 2.0 - 3.5 Web 应用程序提供最佳菜单?建议不必特别是 ASP.Net 控件,也可以是在 ASP.Net Web 应用程序中运行良好的其他菜单。

我希望这些建议是不需要购买或版税的选项。开源建议会更好。

【问题讨论】:

  • 简短回答:视情况而定。长答案:没有“最佳”控制,因为您的选择取决于您网站的风格、您正在构建的架构、您正在使用的工具等。请详细说明您的问题,给我们更多详细信息- 谢谢。
  • 简答:除了 asp:Menu 控件之外的任何东西!

标签: asp.net javascript html asp.net-2.0


【解决方案1】:

我也喜欢创建无序列表。它让设计师可以灵活地使用菜单。他们可以使用自己的 js+css 解决方案来创建下拉菜单或为静态菜单设置漂亮的样式。相同的 html 很容易变成左手、顶部、下拉,甚至是带有 css 更改的完整站点地图。

要注意的是,我喜欢将站点地图数据存储在分层数据结构中,并使用递归 lambda 来生成它。有关示例,请参见下面的这个小型控制台应用程序及其输出。

输出html

<li><a href="/">First</a><li><a href="/firstsub.aspx">FirstSub</a></li><li><a hr
ef="/secondsub.aspx">SecondSub</a></li></li><li><a href="/second.aspx">Second</a
></li>

源码c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SiteMapDemo
{
    class MenuItem
    {
        public Guid ID {get; set;}
        public Guid? ParentID{get;set;}
        public string Name { get; set; }
        public string Path { get; set; }
        public int Rank { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<MenuItem> menu = new List<MenuItem>(new[]{
                new MenuItem{ID = Guid.NewGuid(), Name = "First", ParentID=null, Path="/", Rank=0},
                new MenuItem{ID = Guid.NewGuid(), Name = "Second", ParentID=null, Path="/second.aspx",Rank=1},
            });
            menu.AddRange(new[] { 
                new MenuItem{ID = Guid.NewGuid(), Name = "FirstSub", ParentID=menu[0].ID, Path="/firstsub.aspx",Rank=0},
                new MenuItem{ID = Guid.NewGuid(), Name = "SecondSub", ParentID=menu[0].ID, Path="/secondsub.aspx",Rank=1},
                });
            Func<List<MenuItem>, Guid?, string> renderMenu = null;
            renderMenu = (menus, Parent) =>
            {
                var sub = menus.Where(m => m.ParentID == Parent).OrderBy(s=>s.Rank).ToList();
                if (sub.Count > 0)
                {
                    StringBuilder sb = new StringBuilder();
                    sub.ForEach(s => { sb.Append(String.Format("<li><a href=\"{0}\">{1}</a>{2}</li>", s.Path, s.Name, renderMenu(menus, s.ID))); });
                    return sb.ToString();
                }
                return "";
            };
            Console.Write(renderMenu(menu, null));
            Console.ReadLine();
        }
    }
}

【讨论】:

    【解决方案2】:

    我使用 jQuery Superfish:http://users.tpg.com.au/j_birch/plugins/superfish/。强烈推荐by others

    【讨论】:

      【解决方案3】:

      YUI 按钮或菜单控件(适用于现有 HTML):

      http://developer.yahoo.com/yui/examples/button/btn_example07.html

      一个很好地包装了这些控件的 ASP.NET 库,于 2008 年 12 月发布:

      http://www.codeplex.com/YUIAspNet/

      JQuery Suckerfish 菜单,使用 ul,li 元素工作:

      http://be.twixt.us/jquery/suckerFish.php

      【讨论】:

      • YUI 的优势是他们在所有不同的浏览器上测试他们所有的东西。他们是一家“真正的公司”,而不仅仅是在他们自己的时间进行控制的人,而你最终会因为他们不兼容而放弃。他们是免费的!我今天才开始使用它们,印象深刻。
      【解决方案4】:

      我发现最灵活的方法是使用 CSS 来设置无序列表的样式,如下所示:

      <div id="nav_main" >
      <ul>
        <li id="current">Button 1</li>
        <li><a href="#">Button 2</a></li>
        <li><a href="#">Button 3</a></li>
        <li><a href="#">Button 4</a></li>
        <li><a href="#">Button 5</a></li>
      </ul>
      </div> 
      

      您会发现许多 CSS 方法来使用悬停背景图像等设置此类列表的样式。

      现在,如果您正在使用 Webforms 并且想要使用站点地图,那么我建议您使用中继器而不是使用菜单控件。通过这种方式,您可以最大程度地控制生成列表。

      同样,如果您使用的是 ASP.NET MVC,您可以在站点地图上执行 foreach 以创建您的列表。

      这当然只适用于简单的菜单,但它可以扩展到包括更复杂的菜单。我发现以下 CSS 样式的菜单非常好:http://www.lwis.net/free-css-drop-down-menu/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-12
        • 2010-09-10
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 2015-02-11
        • 2011-01-21
        相关资源
        最近更新 更多