Domanda

Cosa trovi per fornire il miglior menu per un'applicazione web ASP.Net 2.0 - 3.5? I suggerimenti non devono essere in particolare controlli ASP.Net, ma potrebbero essere altri menu che funzionano bene all'interno di un'applicazione Web ASP.Net.

Vorrei che i suggerimenti fossero opzioni che non richiedono spese di acquisto o royalty. I suggerimenti di OpenSource sarebbero persino migliori.

È stato utile?

Soluzione

Altri suggerimenti

Ho scoperto che il più flessibile è usare i CSS per dare uno stile a un elenco non ordinato come questo:

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

Troverai molti modi CSS per modellare questo tipo di elenco con immagini di sfondo al passaggio del mouse, ecc.

Ora se stai usando Webforms e vuoi usare la tua sitemap, allora suggerirei di usare un ripetitore e NON usare il controllo menu. Avrai il massimo controllo sulla generazione della tua lista in questo modo.

Allo stesso modo, se si utilizza ASP.NET MVC, è possibile fare una ricerca sulla propria Sitemap per creare il proprio elenco.

Questo ovviamente è solo per menu semplici, ma può essere espanso per includere menu più complicati. Ho trovato molto buono il seguente menu in stile CSS: http: //www.lwis.net/free-css-drop-down-menu/

Pulsanti YUI o controlli di menu (funziona con HTML esistente):

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

Una libreria ASP.NET che avvolge molto bene questi controlli, rilasciata a dicembre 2008:

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

Il menu di JQuery suckerfish, funziona usando ul, li elements:

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

Mi piace anche creare elenchi non ordinati. Permette al designer di essere flessibile con i menu. Possono utilizzare la propria soluzione js + css per creare menu a discesa o per adattarli perfettamente ai menu statici. Lo stesso codice HTML può facilmente diventare la mano sinistra, in alto, a discesa o persino una mappa del sito completa con modifiche css.

A tale proposito, mi piace archiviare i dati della mappa del sito in una struttura di dati gerarchica e utilizzare un lambda ricorsivo per generarlo. Per un esempio, vedi questa piccola app console di seguito con il suo output.

output 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 fonte 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();
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top