Procedura: filtrare i nodi recuperati dai controlli server Web SiteMapDataSource
Aggiornamento: novembre 2007
Il controllo SiteMapDataSource recupera i dati della mappa del sito da un provider di mappa del sito, ad esempio XmlSiteMapProvider, il provider predefinito di mappa del sito per ASP.NET. È possibile configurare il controllo SiteMapDataSource in modo che restituisca l'intero insieme dei nodi della mappa del sito oppure un sottoinsieme. Questa operazione è utile per visualizzare su una pagina più strutture di spostamento, ognuna delle quali relativa a una sezione della mappa del sito separata, nonché per distribuire gli elementi di spostamento all'interno del sito attraverso pagine master separate, in ciascuna delle quali è visualizzata una parte diversa della mappa del sito generale.
Per utilizzare questi controlli di spostamento all'interno del sito, è necessario descrivere la struttura del sito in un file Web.sitemap, quindi creare i file aspx elencati nella mappa.
Per creare un file Web.sitemap
Creare un nuovo file nella directory principale del sito Web e denominarlo Web.sitemap. Inserire nel file il seguente codice necessario:
<?xml version="1.0" encoding="utf-8" ?> <siteMap> </siteMap>
Creare un elemento siteMapNode principale come elemento figlio dell'elemento siteMap definendo gli attributi seguenti:
title Assegnare un titolo al nodo della mappa del sito, che sarà visualizzato come testo del collegamento per la pagina Web.
url Assegnare un URL per una pagina Web. È possibile utilizzare un URL completo oppure un URL relativo, ad esempio ~/Default.aspx. Il carattere tilde (~) indica la directory principale dell'applicazione. In successivi passaggi di questa procedura sarà necessario creare pagine Web per ciascun URL elencato nella mappa del sito. Se nell'elenco viene incluso un URL non esistente o duplicato, l'applicazione non potrà essere eseguita. L'attributo può essere lasciato vuoto, ma ai fini di questo esempio deve essere impostato su un file aspx modificabile.
Nota:
Nella mappa del sito può esistere un solo elemento siteMapNode principale. In questo elemento è tuttavia possibile includere un numero qualsiasi di elementi siteMapNode figlio.
Creare un elemento siteMapNode come elemento figlio dell'elemento siteMapNode principale. Impostare gli stessi attributi indicati in precedenza.
Creare un elemento siteMapNode come elemento figlio dell'elemento siteMapNode precedente. Impostare gli stessi attributi indicati in precedenza. Ai fini di questo esempio, nella mappa del sito devono essere presenti tre livelli di elementi siteMapNode.
Il file Web.sitemap sarà simile al seguente codice di esempio:
<?xml version="1.0" encoding="utf-8" ?> <siteMap> <siteMapNode title="Home" url="~/Default.aspx" roles="*"> <siteMapNode title="Services" url="~/Services.aspx " > <siteMapNode title="Training" url="~/Training.aspx" /> </siteMapNode> <siteMapNode title="Products" url="" /> </siteMapNode> </siteMap>
Salvare e chiudere il file Web.sitemap.
Per aggiungere l'esplorazione dei siti a una pagina Web
Creare una pagina aspx per ciascun file indicato negli attributi url del file Web.sitemap. In ogni file aspx sostituire il codice esistente con il seguente per visualizzare la mappa del sito in diversi controlli che ne espongono i dati. Se un file aspx non è compreso nella mappa del sito, non verrà visualizzato il controllo per l'esplorazione del sito corrispondente.
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <div> <h2>Using SiteMapPath</h2> <asp:SiteMapPath ID="SiteMapPath1" Runat="server"> </asp:SiteMapPath> <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" /> <h2>Using TreeView</h2> <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1"> </asp:TreeView> <h2>Using Menu</h2> <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"> </asp:Menu> <h2>Using a Horizontal Menu</h2> <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" StaticDisplayLevels="2" > </asp:Menu> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <div> <h2>Using SiteMapPath</h2> <asp:SiteMapPath ID="SiteMapPath1" Runat="server"> </asp:SiteMapPath> <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" /> <h2>Using TreeView</h2> <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1"> </asp:TreeView> <h2>Using Menu</h2> <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"> </asp:Menu> <h2>Using a Horizontal Menu</h2> <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" StaticDisplayLevels="2" > </asp:Menu> </div> </form> </body> </html>
Salvare i file.
Per modificare il nodo di avvio restituito dal controllo di spostamento
Nella pagina aspx della mappa del sito composta da tre livelli individuare il controllo SiteMapDataSource, che potrebbe essere simile alla riga di codice seguente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Modificare la riga di codice precedente in modo che sia analoga alla seguente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" StartingNodeUrl="~/Services.aspx" />
Salvare il file e visualizzarlo in un browser.
La struttura di spostamento nella pagina Training.aspx è diversa da quella presente nelle altre due pagine. Le strutture iniziano dal secondo nodo. Il controllo SiteMapPath non viene influenzato perché ottiene i dati della mappa del sito direttamente dal provider e non da un controllo SiteMapDataSource.
Le altre opzioni che seguono sono utilizzate per modificare il nodo di avvio:
- Impostando la proprietà StartFromCurrentNode su true, la struttura della mappa del sito verrà recuperata a partire dal nodo per la pagina corrente.
Impostando la proprietà StartingNodeOffset su 2, la struttura della mappa del sito verrà recuperata a partire da due nodi dopo il principale e seguendo il percorso della pagina corrente.
Per nascondere il nodo di avvio
Nella pagina aspx della mappa del sito composta da tre livelli individuare il controllo SiteMapDataSource, che potrebbe essere simile alla riga di codice seguente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Modificare la riga di codice precedente in modo che sia analoga alla seguente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" ShowStartingNode="~/Services.aspx" />
Salvare il file e visualizzarlo in un browser.
La struttura di spostamento in questa pagina è diversa da quella presente nelle altre due pagine. I risultati saranno diversi da quelli ottenuti impostando la proprietà StartingNodeOffset su 1 o la proprietà StartingNodeUrl su ~/Services.aspx, perché l'insieme dei nodi della mappa del sito non è limitato a una sola diramazione della mappa del sito generale. Questa struttura consente di visualizzare anche il nodo Prodotti.
Nota:
Se il nodo di avvio è nidificato a un livello più profondo del nodo principale della mappa del sito, è possibile impostare la proprietà StartingNodeOffset su un numero negativo. Questa operazione è in genere utile quando la proprietà StartFromCurrentNode è impostata su true e si desidera visualizzare la mappa del sito a partire dall'elemento padre del nodo corrente.
Vedere anche
Attività
Procedura: personalizzare l'aspetto dei controlli server Web SiteMapPath
Concetti
Implementazione dei provider di mappa del sito ASP.NET
Rimozione della protezione della mappa del sito ASP.NET
Protezione del sistema di spostamento all'interno dei siti ASP.NET
Protezione dell'accesso ai dati