Cómo: Enumerar los nodos del mapa del sitio mediante programación

Actualización: noviembre 2007

Puede utilizar los controles de exploración para agregar la función de exploración del sitio a sus páginas Web sin apenas escribir código o sin escribir código alguno, aunque también puede trabajar con la función de exploración del sitio mediante programación. Cuando su aplicación Web se ejecuta, ASP.NET crea un objeto SiteMap que refleja la estructura del mapa del sitio. El objeto SiteMap, a su vez, expone una colección de objetos SiteMapNode que contienen las propiedades de cada nodo en el mapa del sitio.

Los controles de desplazamiento, como el control SiteMapPath, trabajan con los objetos SiteMap y SiteMapNode para representar los vínculos apropiados automáticamente.

Puede utilizar los objetos SiteMap y SiteMapNode en su propio código para crear una función de exploración personalizada.

Ejemplo

En el ejemplo de código siguiente se indica cómo se muestran los títulos de todos los nodos secundarios de la página actual, siempre que la página actual aparezca en el archivo del mapa del sitio. Si la página actual no aparece en el archivo del mapa del sitio, la primera línea de código que utiliza el objeto SiteMap producirá una excepción 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>

Seguridad

Puede ocultar los vínculos en su estructura de exploración a los usuarios que tienen funciones de seguridad específicas. Para obtener más información, vea Reducción de seguridad del mapa del sitio de ASP.NET.

Vea también

Tareas

Cómo: Modificar los nodos de mapa de sitio en memoria mediante programación

Conceptos

Proteger la exploración del sitio de ASP.NET

Proteger el acceso a datos

Otros recursos

Seguridad de aplicaciones ASP.NET en entornos alojados en host