Procedura: visualizzare i dati della mappa del sito in controlli server Web non gerarchici

Aggiornamento: novembre 2007

I dati della mappa del sito sono per definizione gerachici, ovvero ciascun nodo può contenere zero o più nodi figlio. I controlli TreeView e Menu sono appositamente progettati per utilizzare dati gerarchici. È tuttavia possibile associare i dati della mappa del sito a controlli non gerarchici, ad esempio DropDownList, CheckBoxList e altri controlli che visualizzano i dati in formato lineare (flat).

Nota:

Soltanto SiteMapPath e i controlli che supportano l'interfaccia INavigateUIData eseguono il rendering dei nodi della mappa del sito come collegamenti.

Esempio

Nell'esempio di codice riportato di seguito viene utilizzato un controllo DropDownList per visualizzare i dati della mappa del sito provenienti da un file Web.sitemap.

Quando un client seleziona un elemento nell'elenco a discesa, il browser viene reindirizzato alla pagina selezionata. Questa operazione viene eseguita chiamando il metodo Redirect nel gestore eventi OnSelectedIndexChanged.

Se questo esempio di codice viene inserito in una pagina master, la proprietà StartFromCurrentNode nel controllo SiteMapDataSource assicura che nell'elenco a discesa venga sempre visualizzata una mappa del sito che inizia dalla pagina attualmente in esecuzione.

<%@ Page Language="VB"  AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >
  Public Sub _OnSelectedIndexChanged(ByVal Sender As Object, ByVal e As EventArgs)
    Response.Redirect(DropDownList1.SelectedItem.Value)
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="Server"
          StartFromCurrentNode="true"
          ShowStartingNode="false" />
      <asp:DropDownList ID="DropDownList1" Runat="Server" 
          DataSourceID="SiteMapDataSource1"
          AutoPostBack="True" 
          DataTextField="Title" 
          DataValueField="Url"
          OnSelectedIndexChanged="_OnSelectedIndexChanged" >
      </asp:DropDownList>
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >
  void _OnSelectedIndexChanged(Object sender, EventArgs e)
  { 
    Response.Redirect(DropDownList1.SelectedItem.Value);
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>DropDownList Bound to SiteMapDataSource</title>
</head>
<body>
    <form id="form1" >
    <div>
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="Server"
          StartFromCurrentNode="true"
          ShowStartingNode="false" />
      <asp:DropDownList ID="DropDownList1" Runat="Server" 
          DataSourceID="SiteMapDataSource1"
          AutoPostBack="True" 
          DataTextField="Title" 
          DataValueField="Url"
          OnSelectedIndexChanged="_OnSelectedIndexChanged" >
      </asp:DropDownList>
    </div>
    </form>
</body>
</html>

Se la pagina non contiene alcun nodo figlio, l'elenco a discesa sarà vuoto. Se il client seleziona un elemento per il quale non è definita alcuna proprietà relativa all'URL nel file Web.sitemap, il client verrà reindirizzato alla home page dell'applicazione.

Compilazione del codice

  • Per questo esempio è necessario un file Web.sitemap valido che faccia riferimento alla pagina Web ASP.NET contenente l'esempio di codice. Se questo codice viene inserito in un file non elencato in uno dei nodi nel file Web.sitemap, rimuovere dal controllo la seguente proprietà:

    StartFromCurrentNode="true"
    

Vedere anche

Attività

Procedura: filtrare i nodi recuperati dai controlli server Web SiteMapDataSource

Concetti

Cenni preliminari sugli spostamenti all'interno dei siti ASP.NET

Mappe del sito ASP.NET

Protezione del sistema di spostamento all'interno dei siti ASP.NET

Protezione dell'accesso ai dati

Altre risorse

Protezione delle applicazioni ASP.NET in ambienti host