Pregunta

¿Qué encuentra para proporcionar el mejor menú para una aplicación web ASP.Net 2.0 - 3.5? Las sugerencias no tienen que ser particularmente controles de ASP.Net, pero podrían ser otros menús que funcionen bien dentro de una aplicación web ASP.Net.

Me gustaría que las sugerencias sean opciones que no requieran compras o tarifas de regalías. Las sugerencias de OpenSource serían aún mejores.

¿Fue útil?

Solución

Uso jQuery Superfish: http://users.tpg.com.au / j_birch / plugins / superfish / . Muy recomendable por otros también.

Otros consejos

Descubrí que lo más flexible es usar CSS para diseñar una lista desordenada como esta:

<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> 

Encontrarás muchas formas CSS para diseñar este tipo de lista con imágenes de fondo flotantes, etc.

Ahora, si está utilizando formularios web y quiere usar su mapa del sitio, le sugiero que use un repetidor y NO use el control del menú. Tendrás el mayor control de tu generación de tu lista de esta manera.

De forma similar, si está utilizando ASP.NET MVC, puede hacer un foreach en su mapa del sitio para crear su lista.

Por supuesto, esto es solo para menús simples, pero se puede expandir para incluir menús más complicados. He encontrado que el siguiente menú de estilo CSS es muy bueno: http: //www.lwis.net/free-css-drop-down-menu/

Botones YUI o controles de menú (funciona con HTML existente):

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

Una biblioteca ASP.NET que envuelve estos controles muy bien, lanzada en diciembre de 2008:

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

El menú de suckerfish de JQuery, funciona utilizando los elementos ul, li:

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

También me gusta crear listas desordenadas. Permite al diseñador ser flexible con los menús. Pueden usar su propia solución js + css para crear menús desplegables o personalizarlos bien para menús estáticos. El mismo html puede convertirse fácilmente en la mano izquierda, en la parte superior, en el menú desplegable o incluso en un mapa completo del sitio con cambios de CSS.

A esa nota, me gusta almacenar los datos del mapa del sitio en una estructura de datos jerárquica y usar un lambda recursivo para generarlos. Para ver un ejemplo, vea esta pequeña aplicación de consola a continuación con su salida.

salida 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>

la fuente 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();
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top