ASP.Net应用程序的最佳菜单是什么?

时间:2009-01-08 05:55:38

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

您如何为ASP.Net 2.0 - 3.5 Web应用程序提供最佳菜单?建议不一定特别是ASP.Net控件,但可以是在ASP.Net Web应用程序中运行良好的其他菜单。

我希望这些建议成为不需要购买或使用费的选项。 OpenSource的建议会更好。

4 个答案:

答案 0 :(得分: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并且想要使用站点地图,那么我建议使用Repeater而不使用菜单控件。您可以通过这种方式最有效地控制列表。

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

这当然仅适用于简单菜单,但可以扩展为包含更复杂的菜单。我发现以下CSS风格的菜单非常好:http://www.lwis.net/free-css-drop-down-menu/

答案 1 :(得分:2)

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

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

2008年12月发布的一个非常好地封装这些控件的ASP.NET库:

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

JQuery suckerfish菜单,使用ul,li元素:

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

答案 2 :(得分:1)

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

答案 3 :(得分: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();
        }
    }
}