Antonio Feliziani
a- a+

Site Navigation, nuova funzione di Asp Net 2.0

Una delle novità introdotte con l'avvento della versione 2.0 di ASP.NET è la Site Navigation, caratteristica che permette di creare la struttura della navigazione della propria applicazione web in maniera sicuramente facile ed intuitiva.

Ogni sito internet (o intranet) che si rispetti, ha bisogno infatti di un sistema di navigazione solido, che permetta all'utente di ritrovarsi all'interno dell'applicazione e saltare con facilità da una pagina all'altra, senza rimandi inutili e senza l'utilizzo delle funzioni del browser (che, ricordiamo, non devono essere sostituite).

Per far ciò, ASP.NET 2.0 offre un sistema, basato anch'esso sul concetto di "Provider Model Design Pattern" , cui appartengono nuove classi e controlli web (la struttura del sistema è visibile in figura).
Questi i 3 nuovi controlli aggiunti:

  • Menu, controllo che visualizza la struttura del sito attraverso un menu a tendina personalizzabile.
  • TreeView, controllo che visualizza la struttura del sito in un menu ad albero espandibile.
  • SiteMapPath, controllo che visualizza la posizione corrente dell'utente rispetto alla struttura del sito. Quello che, in gergo, viene chiamato "Breadcrumb" (briciole di pane).

Ognuno di questi controlli però, prevede la presenza della "Site Map" , una fonte di dati che rappresenti l'intera struttura del sito in questione. La Site Map può essere sia rappresentata da uno o più file .sitemap (che non sono altro che file XML) oppure da uno o più custom provider scritti da noi.
In poche parole, questo modello permette la creazione di un solido sistema di navigazione, attraverso la scrittura di semplici file XML, che contengono la struttura della nostra applicazione web e che fungono da fonte di dati per i controlli web sopra citati.

 

Definizione della Site Map

Come abbiamo detto, esistono più modi per creare la Site Map di un sito web. Di default, ASP.NET 2.0 si aspetta di trovare nella root dell'applicazione il file web.sitemap; questo file deve avere una struttura ben precisa, vediamone un esempio:

 

xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">

  <siteMapNode url="~/default.aspx" title="Home page" description="Site home page">

    <siteMapNode url="~/blog.aspx" title="Blog" description="My blog"/>

    <siteMapNode url="~/articoli.aspx" title="Articoli" description="Elenco articoli" />

  siteMapNode>

siteMap>


Se guardate con attenzione vi accorgerete che questo file non è altro che una collezione di oggetti di tipo SiteMapNode, con la dichiarazione dei suoi 3 attributi principali: url, l'indirizzo della pagina, title, il titolo della pagina e description, la descrizione della pagina (che andrà a formare il contenuto del relativo tooltip).
 

Nota: specificando la tilde (~) allinizio di ogni file, dichiariamo che quel file va cercato a partire dalla root directory della nostra applicazione.


E' inoltre possibile incapsulare più file .sitemap, all'interno della SiteMap di default, in modo tale da poter amministrare più facilmente differenti "canali" o "zone" del nostro sito web.
Ecco un esempio:

Articoli/articoli.sitemap
 

xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">

  <siteMapNode url="~/Articoli/default.aspx" title="Articoli" description="Elenco articoli">

    <siteMapNode url="~/Articoli/uno.aspx" title="Articolo 1" description="Primo articolo"/>

    <siteMapNode url="~/Articoli/due.aspx" title="Articolo 2" description="Secondo articolo"/>

    <siteMapNode url="~/Articoli/tre.aspx" title="Articolo 3" description="Terzo articolo"/>

  siteMapNode>

siteMap>


web.sitemap
 

xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">

  <siteMapNode url="~/default.aspx" title="Home page" description="Site home page">

    <siteMapNode url="~/blog.aspx" title="Blog" description="My blog"/>

    <siteMapNode siteMapFile="~/Articoli/articoli.sitemap" />

  siteMapNode>

siteMap>


Una volta quindi che abbiamo definito la nostra Site Map, e finora l'abbiamo fatto utilizzando i metodi standard (i file .sitemap), vediamo come utilizzare i controlli Menu, TreeView e SiteMapPath per creare la struttura di navigazione del nostro sito web, senza scrivere una riga di codice !!

Mentre il web control SiteMapPath, prende come fonte di dati direttamente il web.sitemap di default, gli altri due controlli hanno bisogno invece di una fonte di dati specificata, poiché possono essere utilizzati in vari contesti. Per specificare la fonte di dati, viene utilizzata la proprietà DataSourceID, propria dei due web controls, e il controllo SiteMapDataSource, che, se non specificato un Site Map Provider, cerca anchesso il web.sitemap di default. Cosa cambia ? Beh, se non specifichiamo nessun altro provider, non cambia esattamente niente, ma se invece proviamo a gestire più Site Map Provider il controllo SiteMapDataSource avrà la sua importanza.
Ecco, quindi, come risulteranno i controlli descritti, una volta inseriti in una pagina ASP.NET:

 

<asp:SiteMapDataSource ID="siteMapDataSource" runat="server" />

<asp:TreeView ID="TreeView1" runat="server" DataSourceID="siteMapDataSource" />

<asp:Menu ID="Menu1" runat="server" DataSourceID="siteMapDataSource"  />



<asp:SiteMapPath ID="breadcrumb" runat="server" CurrentNodeStyle-Font-Bold="true" />


E come vedete, funzionano senza alcuna riga di codice nel file di code-behind.

Definizione di più Site Map Provider

Ok. Abbiamo appena visto come creare la nostra Site Map inserendo nella root della nostra applicazione web il file web.sitemap; ma se per caso avessimo la necessità di avere più Site Map, magari chiamate in modo diverso da quella di default ?
Ecco, la soluzione ci viene data dal nostro caro web.config; infatti al suo interno abbiamo un nuovo elemento, chiamato SiteMap, dove possiamo definire più Site Map Provider, da utilizzare assieme a quello di default oppure separatemente.

 

<siteMap defaultProvider="All_SiteMapProvider">

  <providers>

    <clear />

    <add name="All_SiteMapProvider" siteMapFile="Web.sitemap" 

               type="System.Web.XmlSiteMapProvider" />

    <add name="External_SiteMapProvider" siteMapFile="~/Articoli/articoli.sitemap"

               type="System.Web.XmlSiteMapProvider" />

  providers>

siteMap>


In questa maniera abbiamo settato il Site Map Provider di default (che sarà ancora il nostro file web.sitemap) e un ulteriore provider per la sezione articoli. Il file web.sitemap diventerà quindi:

 

xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

    <siteMapNode url="~/Default.aspx" title="Home page"  description="Home page">

        <siteMapNode url="~/blog.aspx" title="Blog"  description="My Blog" />

        <siteMapNode provider="External_SiteMapProvider" />

    siteMapNode>

siteMap>


Questo sistema ci permette di aggiungere ai provider standard, dei custom provider, creati da noi, senza l'utilizzo di file .sitemap; questo argomento sarà approfondito nel prossimo articolo.

Link utili:
ASP.NET Site Navigation overview
SiteMap class
SiteMapNode class
SiteMapPath control
TreeView control
Menu control
XmlSiteMapProvider



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Condividi le tue opinioni su questo articolo!