Condividi tramite


Procedura: enumerare i nodi della mappa del sito a livello di codice

Aggiornamento: novembre 2007

Per aggiungere i percorsi di spostamento nel sito alle pagine Web con una quantità minima o nulla di codice, è possibile utilizzare i controlli di spostamento. L'operazione può tuttavia essere eseguita anche a livello di codice. Quando l'applicazione Web viene eseguita, ASP.NET crea un oggetto SiteMap che riflette la struttura della mappa del sito. L'oggetto SiteMap espone a sua volta un insieme di oggetti SiteMapNode che contengono le proprietà per ogni nodo presente nella mappa del sito.

I controlli di spostamento, ad esempio SiteMapPath, utilizzano gli oggetti SiteMap e SiteMapNode per eseguire il rendering dei collegamenti appropriati in modo automatico.

È possibile utilizzare gli oggetti SiteMap e SiteMapNode nel codice per creare una struttura di spostamento personalizzata.

Esempio

Nel codice di esempio seguente viene illustrato come visualizzare i titoli di tutti i nodi figlio per la pagina corrente, purché questa sia inclusa nell'elenco del file di mappa del sito. Se la pagina corrente non è presente nell'elenco del file di mappa del sito, la prima riga di codice che utilizza l'oggetto SiteMap genererà un'eccezione NullReferenceException.

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

  Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

    Try

      Dim LabelText As String = ""

      ' Displays the title of the current node.
      Label_CurrentNode.Text = SiteMap.CurrentNode.Title

      ' Determines if the current node has child nodes.
      If (SiteMap.CurrentNode.HasChildNodes) Then
        For Each ChildNodesEnumerator As SiteMapNode In SiteMap.CurrentNode.ChildNodes
          ' Displays the title of each node.
          LabelText = LabelText & ChildNodesEnumerator.Title & "<br />"
        Next
      Else
        LabelText = LabelText & "No child nodes."
      End If

      Label_ChildNodes.Text = LabelText

    Catch ex As NullReferenceException
      Label_CurrentNode.Text = "The current file is not in the site map."
    Catch ex As Exception
      Label_CurrentNode.Text = "Generic exception: " & e.ToString()
    End Try

  End Sub ' Page_Load

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>Enumerating Child Site Map Nodes</title>
  </head>
  <body>
    <form id="Form1" method="post" >

      <h2>Current Node</h2>
      <asp:Label ID="Label_CurrentNode" Runat="Server"></asp:Label>

      <h2>Child Nodes</h2>
      <asp:Label ID="Label_ChildNodes" Runat="Server"></asp:Label>

      <h2>Verify Against Site Map</h2>
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
      <asp:TreeView ID="TreeView1" Runat="server" DataSourceID="SiteMapDataSource1">
      </asp:TreeView>

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

  private void Page_Load(object sender, System.EventArgs e)
  {
    try
    {
      string LabelText = "";

      // Displays the title of the current node.
      Label_CurrentNode.Text = SiteMap.CurrentNode.Title;

      // Determines if the current node has child nodes.
      if (SiteMap.CurrentNode.HasChildNodes)
      {
        foreach (SiteMapNode childNodesEnumerator in SiteMap.CurrentNode.ChildNodes)
        {
          // Displays the title of each node.
          LabelText = LabelText + childNodesEnumerator.Title + "<br />";
        }
      }

      Label_ChildNodes.Text = LabelText;
    }
    catch (System.NullReferenceException ex)
    {
      Label_CurrentNode.Text = "The current file is not in the site map.";
    }
    catch (Exception ex)
    {
      Label_CurrentNode.Text = "Generic exception: " + e.ToString();
    }
  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>Enumerating Child Site Map Nodes</title>
  </head>
  <body>
    <form id="Form1" method="post" >

      <h2>Current Node</h2>
      <asp:Label id="Label_CurrentNode" runat="Server"></asp:Label>

      <h2>Child Nodes</h2>
      <asp:Label id="Label_ChildNodes" runat="Server"></asp:Label>

      <h2>Verify Against Site Map</h2>
      <asp:SiteMapDataSource id="SiteMapDataSource1"  />
      <asp:TreeView id="TreeView1"  dataSourceID="SiteMapDataSource1">
      </asp:TreeView>

    </form>
  </body>
</html>

Sicurezza

Come misura di protezione, è possibile nascondere i collegamenti presenti nella struttura di spostamento agli utenti membri di ruoli specificati. Per ulteriori informazioni, vedere Rimozione della protezione della mappa del sito ASP.NET.

Vedere anche

Attività

Procedura: modificare a livello di codice i nodi della mappa del sito in memoria

Concetti

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