Какое меню лучше всего подходит для приложения ASP.Net? - PullRequest
5 голосов
/ 08 января 2009

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

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

Ответы [ 4 ]

4 голосов
/ 08 января 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 для стилизации этого вида списка с помощью фоновых изображений и т.п.

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

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

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

2 голосов
/ 08 января 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

1 голос
/ 08 января 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>

источник 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();
        }
    }
}
1 голос
/ 08 января 2009

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

...