Какое лучшее меню для приложения ASP.Net?

Что вы считаете лучшим меню для веб-приложения ASP.Net 2.0–3.5? Предложения не обязательно должны быть элементами управления ASP.Net, но могут быть и другими меню, которые хорошо работают в веб-приложении ASP.Net.

Я хотел бы, чтобы предложения были вариантами, которые не требуют покупки или лицензионных отчислений. Предложения OpenSource были бы еще лучше.


person codewright    schedule 08.01.2009    source источник
comment
Краткий ответ: это зависит. Длинный ответ: лучшего контроля не существует, так как ваш выбор зависит от стиля вашего веб-сайта, архитектуры, в которой вы строите, инструментов, которые вы используете, и т. д. Пожалуйста, уточните свой вопрос, дайте нам больше деталей - спасибо .   -  person user39603    schedule 08.01.2009
comment
Краткий ответ: ВСЕ, кроме asp:Menu control!   -  person Daniel Schaffer    schedule 08.01.2009


Ответы (4)


Я использую jQuery Superfish: http://users.tpg.com.au/j_birch/plugins/superfish/. Настоятельно рекомендуется от другие тоже.

person nshaw    schedule 08.01.2009

Я обнаружил, что наиболее гибким является использование 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 для стилизации такого списка с фоновыми изображениями при наведении курсора и т. д.

Теперь, если вы используете веб-формы и хотите использовать свою карту сайта, я бы предложил использовать повторитель, а НЕ использовать элемент управления меню. Таким образом, вы будете иметь максимальный контроль над созданием списка.

Точно так же, если вы используете ASP.NET MVC, вы можете выполнить foreach на своей карте сайта, чтобы создать свой список.

Это, конечно, только для простых меню, но его можно расширить, включив более сложные меню. Я считаю очень хорошим следующее меню в стиле CSS: http://www.lwis.net/free-css-drop-down-menu/

person Trevor de Koekkoek    schedule 08.01.2009

Кнопки YUI или элементы управления меню (работает с существующим HTML):

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

Библиотека ASP.NET, которая очень хорошо объединяет эти элементы управления, выпущенная в декабре 2008 года:

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

Меню JQuery Suckerfish работает с использованием элементов ul, li:

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

person Chris S    schedule 08.01.2009
comment
Преимущество YUI в том, что они тестируют все свои вещи во всех разных браузерах. они «настоящая компания», а не просто кто-то, кто в свое время создает элементы управления, которые вы в конечном итоге отбрасываете, потому что они несовместимы. и они свободны! я только начинаю использовать их сегодня и действительно впечатлен. - person Simon_Weaver; 25.01.2009

Мне также нравится создавать неупорядоченные списки. Это позволяет дизайнеру быть гибким с меню. Они могут использовать свое собственное решение js+css для создания выпадающих меню или красиво оформить его для статических меню. Один и тот же html может легко стать левой рукой, сверху, выпадающим или даже полной картой сайта с изменениями CSS.

К сведению, мне нравится хранить данные карты сайта в иерархической структуре данных и использовать рекурсивную лямбду для ее создания. В качестве примера см. это небольшое консольное приложение ниже с его выводом.

вывод 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>

исходник С#

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();
        }
    }
}
person ccook    schedule 08.01.2009