Gewusst wie: Programmgesteuertes Auflisten von Siteübersichtsknoten

Aktualisiert: November 2007

Sie können Ihren Webseiten über Navigationssteuerelemente mit wenig oder ganz ohne Code Sitenavigation hinzufügen. Sie können aber auch programmgesteuert mit Sitenavigation arbeiten. Bei Ausführung der Webanwendung erstellt ASP.NET ein SiteMap-Objekt, das die Struktur der Siteübersicht widerspiegelt. Das SiteMap-Objekt wiederum stellt eine Auflistung von SiteMapNode-Objekten zur Verfügung, die Eigenschaften für die einzelnen Knoten der Siteübersicht enthalten.

Navigationssteuerelemente wie das SiteMapPath-Steuerelement arbeiten mit dem SiteMap-Objekt und dem SiteMapNode-Objekt zusammen, um die entsprechenden Links automatisch darzustellen.

Mit dem SiteMap-Objekt und dem SiteMapNode-Objekt können Sie in Ihrem Code benutzerdefinierte Navigation erstellen.

Beispiel

Das folgende Codebeispiel zeigt, wie Sie die Titel aller untergeordneten Knoten der aktuellen Seite anzeigen können, wenn die aktuelle Seite in der Siteübersichtsdatei aufgeführt wird. Wenn die aktuelle Seite nicht in der Siteübersichtsdatei aufgeführt wird, verursacht die erste Codezeile, die das SiteMap-Objekt verwendet, eine NullReferenceException-Ausnahme.

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

Sicherheit

Sie können die Verknüpfungen in der Navigationsstruktur für Benutzer mit bestimmten Sicherheitsrollen ausblenden. Weitere Informationen finden Sie unter Einschränken der ASP.NET-Siteübersicht aus Sicherheitsgründen.

Siehe auch

Aufgaben

Gewusst wie: Programmgesteuertes Ändern von Siteübersichtsknoten im Arbeitsspeicher

Konzepte

Sichern der ASP.NET-Sitenavigation

Sichern des Datenzugriffs

Weitere Ressourcen

ASP.NET-Anwendungssicherheit in Hostumgebungen