Esta documentación está archivada y no tiene mantenimiento.

SiteMapPath (Clase)

Actualización: noviembre 2007

Muestra un conjunto de hipervínculos de texto o imagen que permite a los usuarios explorar un sitio Web más fácilmente, utilizando una cantidad mínima de espacio de la página.

Espacio de nombres:  System.Web.UI.WebControls
Ensamblado:  System.Web (en System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class SiteMapPath : CompositeControl
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public class SiteMapPath extends CompositeControl
public class SiteMapPath extends CompositeControl
<asp:SiteMapPath />

El control SiteMapPath es un control de exploración del sitio que refleja los datos proporcionados por el objeto SiteMap. Proporciona una manera de economizar espacio y explorar fácilmente un sitio, además de servir de punto de referencia del lugar donde se encuentra la página actualmente mostrada en el sitio. Este tipo de control se denomina ruta de exploración o "eyebrow", porque muestra una ruta jerárquica de nombres de página hipervinculados que permite recorrer hacia atrás la jerarquía de páginas desde la ubicación actual. SiteMapDataSource. SiteMapPath es útil para los sitios que tienen estructuras de página jerárquicas profundas y dónde TreeView o Menu podrían ocupar demasiado espacio en una página.

El control SiteMapPath trabaja directamente con los datos del mapa de sitio de un sitio Web. Si lo utiliza en una página no representada en el mapa del sitio, no se mostrará. Para obtener más información sobre los mapas de sitio, vea Información general sobre la exploración del sitio de ASP.NET.

SiteMapPath se compone de nodos. Cada elemento de la ruta se denomina nodo y está representado por un objeto SiteMapNodeItem. El nodo que delimita la ruta y representa la base del árbol jerárquico se denomina nodo raíz. El nodo que representa la página actualmente mostrada es el nodo actual. Cualquier otro nodo entre el nodo actual y el nodo raíz es un nodo primario. La tabla siguiente describe estos tres tipos de nodo.

Tipo de nodo

Descripción

raíz

Nodo que delimita un conjunto jerárquico de nodos.

primario

Nodo que tiene uno o varios nodos secundarios pero no es el nodo actual.

actual

Nodo que representa la página que se muestra actualmente.

Cada nodo mostrado por SiteMapPath es un control HyperLink o Literal al que se puede aplicar una plantilla o estilo. Las plantillas y estilos se aplican a los nodos según dos reglas de prioridad:

  • Si hay una plantilla definida para un nodo, reemplaza cualquier estilo definido para el nodo.

  • Las plantillas y los estilos que son específicos de algunos tipos de nodos reemplazan las plantillas y los estilos generales definidos para todos los nodos.

Las propiedades NodeStyle y NodeTemplate se aplican a todos los nodos, sin tener en cuenta su tipo. Si se definen ambas propiedades, NodeTemplate tiene prioridad.

Las propiedades CurrentNodeTemplate y CurrentNodeStyle se aplican a nodos que representan la página actualmente mostrada. Si se define NodeTemplate además de CurrentNodeTemplate, se omite. Si se define NodeStyle además de CurrentNodeStyle, se combina con CurrentNodeStyle para crear un estilo combinado. Este estilo combinado utiliza todos los elementos de CurrentNodeStyle, además de cualquier elemento adicional de NodeStyle que no entre en conflicto con CurrentNodeStyle.

Las propiedades RootNodeTemplate y RootNodeStyle se aplican al nodo que representa la raíz de la jerarquía de exploración del sitio. Si se define NodeTemplate además de RootNodeTemplate, se omite. Si se define NodeStyle además de RootNodeStyle, se combina con RootNodeStyle para crear un estilo combinado. Este estilo combinado utiliza todos los elementos de RootNodeStyle, además de cualquier elemento adicional de NodeStyle que no entrase en conflicto con CurrentNodeStyle. Finalmente, si la página actualmente mostrada es la página raíz del sitio, se utilizan RootNodeTemplate y RootNodeStyle en lugar de CurrentNodeTemplate o CurrentNodeStyle.

El control SiteMapPath utiliza el proveedor del mapa de sitio identificado por la propiedad SiteMapProvider como origen de datos para la información de exploración del sitio. Si no se especifica ningún proveedor, se utiliza el proveedor predeterminado para el sitio, identificado en la propiedad SiteMap.Provider. Normalmente, ésta es una instancia del proveedor del mapa de sitio predeterminado para ASP.NET, XmlSiteMapProvider. Si se utiliza el control SiteMapPath dentro de un sitio pero no se configura ningún proveedor del mapa de sitio, el control produce una excepción HttpException.

El control SiteMapPath también proporciona varios eventos que se pueden utilizar para programar. De esta manera, se puede ejecutar una rutina personalizada siempre que se produzca un evento. En la siguiente tabla se enumeran los eventos admitidos por el control SiteMapPath.

Evento

Descripción

ItemCreated

Se produce la primera vez que el control SiteMapPath crea SiteMapNodeItem y lo asocia a SiteMapNode.

ItemDataBound

Se produce cuando SiteMapNodeItem se enlaza a datos del mapa de sitio contenidos en SiteMapNode.

Las clases que derivan de SiteMapPath reemplazan el método InitializeItem para personalizar los controles SiteMapNodeItem que contiene el control de exploración. Para controlar totalmente la manera en que los objetos SiteMapNodeItem se crean y agregan a SiteMapPath, las clases derivadas reemplazan el método CreateControlHierarchy.

Accesibilidad

Es posible que el marcado que se representa de manera predeterminada para este control no respete los estándares de accesibilidad enunciados en las directrices prioritarias de WCAG (Instrucciones de accesibilidad a contenido Web 1.0). Para obtener detalles sobre accesibilidad compatible con este control, vea Controles y accesibilidad en ASP.NET.

TopicLocation
Tutorial: Agregar la función de exploración de sitios WebGenerar aplicaciones Web ASP .NET en Visual Studio
Tutorial: Agregar la función de exploración de sitios WebGenerar aplicaciones con Visual Web Developer
Cómo: Enumerar los nodos del mapa del sitio mediante programaciónGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Configurar varios mapas de sitio y proveedores de mapas de sitioGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Filtrar los nodos recuperados por controles SiteMapDataSource de servidor WebGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Modificar los nodos de mapa de sitio en memoria mediante programaciónGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Buscar datos de mapas de sitioGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Personalizar la apariencia de los controles SiteMapPath de servidor WebGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Mostrar los datos de mapas de sitio de controles no jerárquicos de servidor webGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Agregar la función de exploración a sitios sencillosGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Enumerar los nodos del mapa del sitio mediante programaciónGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Configurar varios mapas de sitio y proveedores de mapas de sitioGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Filtrar los nodos recuperados por controles SiteMapDataSource de servidor WebGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Modificar los nodos de mapa de sitio en memoria mediante programaciónGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Buscar datos de mapas de sitioGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Personalizar la apariencia de los controles SiteMapPath de servidor WebGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Mostrar los datos de mapas de sitio de controles no jerárquicos de servidor webGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Agregar la función de exploración a sitios sencillosGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Implementar proveedores de mapas de sitio de ASP.NETGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Implementar proveedores de mapas de sitio de ASP.NETGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Filtrar los nodos recuperados por controles SiteMapDataSource de servidor WebGenerar aplicaciones Web ASP .NET
Cómo: Configurar varios mapas de sitio y proveedores de mapas de sitioGenerar aplicaciones Web ASP .NET
Cómo: Buscar datos de mapas de sitioGenerar aplicaciones Web ASP .NET
Cómo: Implementar proveedores de mapas de sitio de ASP.NETGenerar aplicaciones Web ASP .NET
Cómo: Enumerar los nodos del mapa del sitio mediante programaciónGenerar aplicaciones Web ASP .NET
Cómo: Modificar los nodos de mapa de sitio en memoria mediante programaciónGenerar aplicaciones Web ASP .NET
Cómo: Personalizar la apariencia de los controles SiteMapPath de servidor WebGenerar aplicaciones Web ASP .NET
Cómo: Mostrar los datos de mapas de sitio de controles no jerárquicos de servidor WebGenerar aplicaciones Web ASP .NET
Cómo: Agregar la función de exploración a sitios sencillosGenerar aplicaciones Web ASP .NET

En el ejemplo de código siguiente se utiliza un control SiteMapPath mediante declaración en una página de formularios Web Forms. En este ejemplo se muestran algunas de las reglas de prioridad que rigen el orden en el que se aplican las plantillas y los estilos a los nodos SiteMapPath.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <!-- The following example demonstrates some of the orders
                 of precedence when applying styles and templates to
                 functional nodes of a SiteMapPath.

                 The NodeStyle and RootNodeStyle define the same attributes,
                 but are different and conflict with each other: the
                 RootNodeStyle supersedes NodeStyle, and is the style
                 rendered. Notice, however, that the underline style
                 defined by NodeStyle is still applied.

                 Both a CurrentNodeStyle and a CurrentNodeTemplate are
                 defined. A template supersedes a style for a node
                 type, so CurrentNodeTemplate is displayed and CurrentNodeStyle
                 is ignored. -->

            <asp:SiteMapPath ID="SiteMapPath1" runat="server"
                RenderCurrentNodeAsLink="true"
                NodeStyle-Font-Names="Franklin Gothic Medium"
                NodeStyle-Font-Underline="true"
                NodeStyle-Font-Bold="true"
                RootNodeStyle-Font-Names="Symbol"
                RootNodeStyle-Font-Bold="false"
                CurrentNodeStyle-Font-Names="Verdana"
                CurrentNodeStyle-Font-Size="10pt"
                CurrentNodeStyle-Font-Bold="true"
                CurrentNodeStyle-ForeColor="red"
                CurrentNodeStyle-Font-Underline="false">
                <CURRENTNODETEMPLATE>
                        <asp:Image id="Image1" runat="server" ImageUrl="WebForm2.jpg" AlternateText="WebForm2"/>
                </CURRENTNODETEMPLATE>
            </asp:SiteMapPath>


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


<%@ Page Language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <!-- The following example demonstrates some of the orders
                 of precedence when applying styles and templates to
                 functional nodes of a SiteMapPath.

                 The NodeStyle and RootNodeStyle define the same attributes,
                 but are different and conflict with each other: the
                 RootNodeStyle supercedes NodeStyle, and is the style
                 rendered. Notice, however, that the underline style
                 defined by NodeStyle is still applied.

                 Both a CurrentNodeStyle and a CurrentNodeTemplate are
                 defined. A template supercedes a style for a node
                 type, so CurrentNodeTemplate is displayed and CurrentNodeStyle
                 is ignored. -->

            <asp:SiteMapPath ID="SiteMapPath1" runat="server"
                RenderCurrentNodeAsLink="true"
                NodeStyle-Font-Names="Franklin Gothic Medium"
                NodeStyle-Font-Underline="true"
                NodeStyle-Font-Bold="true"
                RootNodeStyle-Font-Names="Symbol"
                RootNodeStyle-Font-Bold="false"
                CurrentNodeStyle-Font-Names="Verdana"
                CurrentNodeStyle-Font-Size="10pt"
                CurrentNodeStyle-Font-Bold="true"
                CurrentNodeStyle-ForeColor="red"
                CurrentNodeStyle-Font-Underline="false">
                <CURRENTNODETEMPLATE>
                        <asp:Image id="Image1" runat="server" ImageUrl="WebForm2.jpg" AlternateText="WebForm2"/>
                </CURRENTNODETEMPLATE>
            </asp:SiteMapPath>


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


En el ejemplo anterior se utiliza el proveedor del mapa de sitio predeterminado y un archivo Web.sitemap con la estructura siguiente.

<siteMap>
  <siteMapNode title="WebForm1" description="WebForm1" url="WebForm1.aspx" >
    <siteMapNode title="WebForm2" description="WebForm2" url="WebForm2.aspx"/>
  </siteMapNode>
</siteMap>

En el ejemplo de código siguiente se extiende el control SiteMapPath y se le agrega nueva funcionalidad reemplazando el método InitializeItem. El control DropDownSiteMapPath agrega DropDownList después del nodo actual para simplificar el desplazamiento a las páginas que son nodos secundarios de la página actual. En este ejemplo se muestra cómo trabajar con objetos SiteMapNodeItem, incluidas la comprobación de su SiteMapNodeItemType y la llamada al método OnItemCreated después de crear los elementos.

using System;
using System.Collections;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


// The DropDownNavigationPath is a class that extends the SiteMapPath
// control and renders a DropDownList after the CurrentNode. The
// DropDownList displays a list of pages found further down the site map
// hierarchy from the current one. Selecting an item in the DropDownList
// redirects to that page.
//
// For simplicity, the DropDownNavigationPath assumes the
// RootToCurrent PathDirection, and does not apply styles
// or templates the current node.
//
[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
public class DropDownNavigationPath : SiteMapPath {
    // Override the InitializeItem method to add a PathSeparator
    // and DropDownList to the current node.
    protected override void InitializeItem(SiteMapNodeItem item) {

        // The only node that must be handled is the CurrentNode.
        if (item.ItemType == SiteMapNodeItemType.Current)
        {
            HyperLink hLink = new HyperLink();

            // No Theming for the HyperLink.
            hLink.EnableTheming = false;
            // Enable the link of the SiteMapPath is enabled.
            hLink.Enabled = this.Enabled;

            // Set the properties of the HyperLink to
            // match those of the corresponding SiteMapNode.
            hLink.NavigateUrl = item.SiteMapNode.Url;
            hLink.Text        = item.SiteMapNode.Title;
            if (ShowToolTips) {
                hLink.ToolTip = item.SiteMapNode.Description;
            }

            // Apply styles or templates to the HyperLink here.
            // ...
            // ...

            // Add the item to the Controls collection.
            item.Controls.Add(hLink);

            AddDropDownListAfterCurrentNode(item);
        }
        else {
            base.InitializeItem(item);
        }
    }
    private void AddDropDownListAfterCurrentNode(SiteMapNodeItem item) {

        SiteMapNodeCollection childNodes = item.SiteMapNode.ChildNodes;

        // Only do this work if there are child nodes.
        if (childNodes != null) {

            // Add another PathSeparator after the CurrentNode.
            SiteMapNodeItem finalSeparator =
                new SiteMapNodeItem(item.ItemIndex,
                                    SiteMapNodeItemType.PathSeparator);

            SiteMapNodeItemEventArgs eventArgs =
                new SiteMapNodeItemEventArgs(finalSeparator);

            InitializeItem(finalSeparator);
            // Call OnItemCreated every time a SiteMapNodeItem is
            // created and initialized.
            OnItemCreated(eventArgs);

            // The pathSeparator does not bind to any SiteMapNode, so
            // do not call DataBind on the SiteMapNodeItem.
            item.Controls.Add(finalSeparator);

            // Create a DropDownList and populate it with the children of the
            // CurrentNode. There are no styles or templates that are applied
            // to the DropDownList control. If OnSelectedIndexChanged is raised,
            // the event handler redirects to the page selected.
            // The CurrentNode has child nodes.
            DropDownList ddList = new DropDownList();
            ddList.AutoPostBack = true;

            ddList.SelectedIndexChanged += new EventHandler(this.DropDownNavPathEventHandler);

            // Add a ListItem to the DropDownList for every node in the
            // SiteMapNodes collection.
            foreach (SiteMapNode node in childNodes) {
                ddList.Items.Add(new ListItem(node.Title, node.Url));
            }

            item.Controls.Add(ddList);
        }
    }

    // The sender is the DropDownList.
    private void DropDownNavPathEventHandler(object sender,EventArgs e) {
        DropDownList ddL = sender as DropDownList;

        // Redirect to the page the user chose.
        if (Context != null)
            Context.Response.Redirect(ddL.SelectedValue);
    }
}


import System.*;
import System.Collections.*;
import System.ComponentModel.*;
import System.Web.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;

// The DropDownNavigationPath is a class that extends the SiteMapPath
// control and renders a DropDownList after the CurrentNode. The     
// DropDownList displays a list of pages found further down the site map
// hierarchy from the current one. Selecting an item in the DropDownList
// redirects to that page.
//
// For simplicity, the DropDownNavigationPath assumes the 
// RootToCurrent PathDirection, and does not apply styles 
// or templates the current node.
//
public class DropDownNavigationPath extends SiteMapPath
{
    // Override the InitializeItem method to add a PathSeparator
    // and DropDownList to the current node.
    protected void InitializeItem(SiteMapNodeItem item)
    {
        // The only node that must be handled is the CurrentNode.
        if (item.get_ItemType().Equals(SiteMapNodeItemType.Current)) {
            HyperLink hLink = new HyperLink();
            // No Theming for the HyperLink.
            hLink.set_EnableTheming(false);
            // Enable the link of the SiteMapPath is enabled.
            hLink.set_Enabled(this.get_Enabled());
            // Set the properties of the HyperLink to 
            // match those of the corresponding SiteMapNode.
            hLink.set_NavigateUrl(item.get_SiteMapNode().get_Url());
            hLink.set_Text(item.get_SiteMapNode().get_Title());
            if (get_ShowToolTips()) {
                hLink.set_ToolTip(item.get_SiteMapNode().get_Description());
            }
            // Apply styles or templates to the HyperLink here.
            // ...
            // ...
            // Add the item to the Controls collection.
            item.get_Controls().Add(hLink);

            AddDropDownListAfterCurrentNode(item);
        }
        else {
            super.InitializeItem(item);
        }   
    } //InitializeItem

    private void AddDropDownListAfterCurrentNode(SiteMapNodeItem item)
    {
        SiteMapNodeCollection childNodes = item.get_SiteMapNode().
            get_ChildNodes();
        // Only do this work if there are child nodes.
        if (childNodes != null) {
            // Add another PathSeparator after the CurrentNode.
            SiteMapNodeItem finalSeparator = new SiteMapNodeItem(item.
                get_ItemIndex(), SiteMapNodeItemType.PathSeparator);

            SiteMapNodeItemEventArgs eventArgs = new SiteMapNodeItemEventArgs(
                finalSeparator);

            InitializeItem(finalSeparator);
            // Call OnItemCreated every time a SiteMapNodeItem is
            // created and initialized.
            OnItemCreated(eventArgs);
            // The pathSeparator does not bind to any SiteMapNode, so 
            // do not call DataBind on the SiteMapNodeItem.
            item.get_Controls().Add(finalSeparator);
            // Create a DropDownList and populate it with the children of the 
            // CurrentNode. There are no styles or templates that are applied
            // to the DropDownList control. If OnSelectedIndexChanged is raised, 
            // the event handler redirects to the page selected.
            // The CurrentNode has child nodes.
            DropDownList ddList = new DropDownList();
            ddList.set_AutoPostBack(true);

            ddList.add_SelectedIndexChanged(new EventHandler(this.
                DropDownNavPathEventHandler));
            // Add a ListItem to the DropDownList for every node in the
            // SiteMapNodes collection.
            for (int iCtr = 0; iCtr < childNodes.get_Count(); iCtr++) {
                SiteMapNode node = (SiteMapNode)childNodes.get_Item(iCtr);
                ddList.get_Items().Add(new ListItem(node.get_Title(), node.
                    get_Url()));
            }

            item.get_Controls().Add(ddList);
        }
    } //AddDropDownListAfterCurrentNode

    // The sender is the DropDownList.
    public void DropDownNavPathEventHandler(Object sender, EventArgs e)
    {
        DropDownList ddL = (DropDownList)sender;
        // Redirect to the page the user chose.
        if (get_Context() != null) {
            get_Context().get_Response().Redirect(ddL.get_SelectedValue());
        }
    } //DropDownNavPathEventHandler
 } //DropDownNavigationPath


Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0
Mostrar: