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
- Articolo precedente DataList e AccessDataSource
- Articolo successivo Creazione di una mappa del sito attraverso la funzione Site Navigation