Cette documentation est archivée et n’est pas conservée.

SiteMapPath, classe

Remarque : cette classe est nouvelle dans le .NET Framework version 2.0.

Affiche un jeu de texte ou des images-liens hypertexte qui occupent un espace de page restreint et permettent aux utilisateurs de naviguer plus facilement sur un site Web.

Espace de noms : System.Web.UI.WebControls
Assembly : System.Web (dans system.web.dll)

public class SiteMapPath : CompositeControl
public class SiteMapPath extends CompositeControl
public class SiteMapPath extends CompositeControl

Le contrôle SiteMapPath est un contrôle de navigation de site qui reflète les données fournies par l'objet SiteMap. Il s'agit d'un outil de navigation compact également utilisé comme de point de référence pour déterminer l'emplacement de la page affichée sur un site. Ce type de contrôle est généralement appelé fil d'Ariane (breadcrumb) ou « sourcil » (eyebrow) parce qu'il affiche un chemin d'accès hiérarchique des noms de pages reliés par des liens hypertexte qui permettent de remonter la hiérarchie de pages à partir de l'emplacement actuel. SiteMapDataSource. Le SiteMapPath est utile pour les sites qui possèdent des structures de pages hiérarchiques profondes, mais où un TreeView ou Menu peut requérir un espace important sur une page.

Le contrôle SiteMapPath fonctionne directement avec les données de plan de site de votre site Web. Si vous l'utilisez sur une page qui n'est pas représentée dans votre plan de site, il ne sera pas affiché. Pour plus d'informations sur les plans de sites, consultez Vue d'ensemble de la navigation de site ASP.NET.

Le SiteMapPath est composé de nœuds. Chaque élément du chemin d'accès est appelé un nœud et est représenté par un objet SiteMapNodeItem. Le nœud qui ancre le chemin d'accès et représente la base de l'arborescence hiérarchique est appelé le nœud racine. Le nœud qui représente la page affichée est le nœud actuel. Tout autre nœud situé entre le nœud actuel et le nœud racine est un nœud parent. Le tableau suivant décrit les trois types de nœuds.

Type de nœud

Description

racine

Nœud d'ancrage d'un jeu hiérarchique de nœuds.

parent

Nœud qui possède un ou plusieurs nœuds enfants, mais qui n'est pas le nœud actuel.

actuel

Nœud qui représente la page affichée.

Chaque nœud affiché par un SiteMapPath est un contrôle HyperLink ou Literal auquel vous pouvez appliquer un modèle ou un style. Les modèles et les styles sont appliqués aux nœuds suivant deux règles de priorité :

  • Si un modèle est défini pour un nœud, il substitue tout style défini pour celui-ci.

  • Les modèles et les styles spécifiques aux types de nœuds se substituent aux modèles et styles généraux définis pour tous les nœuds.

Les propriétés NodeStyle et NodeTemplate sont appliquées à tous les nœuds, indépendamment de leur type. Si ces deux propriétés sont définies, la propriété NodeTemplate est prioritaire.

Les propriétés CurrentNodeTemplate et CurrentNodeStyle sont appliquées aux nœuds qui représentent la page affichée. Si un NodeTemplate est défini en plus de CurrentNodeTemplate, il est ignoré. Si un NodeStyle est défini en plus de CurrentNodeStyle, il est fusionné avec le CurrentNodeStyle pour créer un style fusionné. Celui-ci utilise tous les éléments du CurrentNodeStyle ainsi que tous les éléments supplémentaires du NodeStyle qui ne sont pas en conflit avec le CurrentNodeStyle.

Les propriétés RootNodeTemplate et RootNodeStyle sont appliquées au nœud qui représente la racine de la hiérarchie de navigation du site. Si un NodeTemplate est défini en plus de RootNodeTemplate, il est ignoré. Si un NodeStyle est défini en plus de RootNodeStyle, il est fusionné avec le RootNodeStyle pour créer un style fusionné. Celui-ci utilise tous les éléments du RootNodeStyle ainsi que tous les éléments supplémentaires du NodeStyle qui ne sont pas entrés en conflit avec le CurrentNodeStyle. Enfin, si la page affichée est la page racine du site, le RootNodeTemplate et le RootNodeStyle sont utilisés à la place du CurrentNodeTemplate ou du CurrentNodeStyle.

Le contrôle SiteMapPath utilise le fournisseur de plan de site identifié par la propriété SiteMapProvider comme sa source de données pour obtenir des informations de navigation de site. Si aucun fournisseur n'est spécifié, il utilise le fournisseur par défaut pour le site, identifié dans la propriété SiteMap.Provider. Il s'agit généralement d'une instance du fournisseur de plan de site par défaut pour ASP.NET, le XmlSiteMapProvider. Si le contrôle SiteMapPath est utilisé dans un site mais qu'aucun fournisseur de plan de site n'est configuré, il lève une exception HttpException.

Le contrôle SiteMapPath fournit également des événements que vous pouvez programmer. Cela vous permet d'exécuter une routine personnalisée lorsqu'un événement se produit. Le tableau suivant répertorie les événements pris en charge par le contrôle SiteMapPath.

Événement

Description

ItemCreated

Se produit lorsque le contrôle SiteMapPath crée d'abord un SiteMapNodeItem et l'associe à un SiteMapNode.

ItemDataBound

Se produit lorsqu'un SiteMapNodeItem est lié à des données de plan de site incluses dans le SiteMapNode.

Les classes dérivées de SiteMapPath substituent la méthode InitializeItem pour personnaliser les contrôles SiteMapNodeItem inclus dans le contrôle de navigation. Pour contrôler complètement la création et l'ajout des objets SiteMapNodeItem au SiteMapPath, les classes dérivées substituent la méthode CreateControlHierarchy.

Accessibilité

Le balisage rendu par défaut pour ce contrôle peut ne pas se conformer aux normes d'accessibilité telles que les instructions de priorité 1 d'accessibilité du contenu Web (WCAG, Web Content Accessibility Guidelines). Pour plus d'informations sur la prise en charge d'accessibilité pour ce contrôle, consultez Contrôles et accessibilité ASP.NET.

RubriqueEmplacement
Procédure pas à pas : ajout de la navigation de site à un site WebGénération d'applications Web ASP.NET dans Visual Studio
Procédure pas à pas : ajout de la navigation de site à un site WebGénération d'applications à l'aide de Visual Web Developer
Comment : énumérer par programme des nœuds sitemapGénération d'applications Web ASP.NET dans Visual Studio
Comment : énumérer par programme des nœuds sitemapGénération d'applications Web ASP.NET dans Visual Studio
Comment : configurer plusieurs plans de sites et fournisseurs sitemapGénération d'applications Web ASP.NET dans Visual Studio
Comment : filtrer les nœuds récupérés par les contrôles serveur Web SiteMapDataSourceGénération d'applications Web ASP.NET dans Visual Studio
Comment : modifier par programme des nœuds sitemap dans la mémoireGénération d'applications Web ASP.NET dans Visual Studio
Comment : localiser les données sitemapGénération d'applications Web ASP.NET dans Visual Studio
Comment : personnaliser l'apparence des contrôles serveur Web SiteMapPathGénération d'applications Web ASP.NET dans Visual Studio
Comment : afficher des données sitemap dans des contrôles serveur Web non hiérarchiquesGénération d'applications Web ASP.NET dans Visual Studio
Comment : ajouter la navigation de site simpleGénération d'applications Web ASP.NET dans Visual Studio
Comment : implémenter des fournisseurs sitemap ASP.NETGénération d'applications Web ASP.NET dans Visual Studio
Comment : configurer plusieurs plans de sites et fournisseurs sitemapGénération d'applications Web ASP.NET dans Visual Studio
Comment : filtrer les nœuds récupérés par les contrôles serveur Web SiteMapDataSourceGénération d'applications Web ASP.NET dans Visual Studio
Comment : modifier par programme des nœuds sitemap dans la mémoireGénération d'applications Web ASP.NET dans Visual Studio
Comment : localiser les données sitemapGénération d'applications Web ASP.NET dans Visual Studio
Comment : personnaliser l'apparence des contrôles serveur Web SiteMapPathGénération d'applications Web ASP.NET dans Visual Studio
Comment : afficher des données sitemap dans des contrôles serveur Web non hiérarchiquesGénération d'applications Web ASP.NET dans Visual Studio
Comment : ajouter la navigation de site simpleGénération d'applications Web ASP.NET dans Visual Studio
Comment : implémenter des fournisseurs sitemap ASP.NETGénération d'applications Web ASP.NET dans Visual Studio
Comment : énumérer par programme des nœuds sitemapGénération d'applications Web ASP.NET
Comment : filtrer les nœuds récupérés par les contrôles serveur Web SiteMapDataSourceGénération d'applications Web ASP.NET
Comment : configurer plusieurs plans de sites et fournisseurs sitemapGénération d'applications Web ASP.NET
Comment : localiser les données sitemapGénération d'applications Web ASP.NET
Comment : implémenter des fournisseurs sitemap ASP.NETGénération d'applications Web ASP.NET
Comment : modifier par programme des nœuds sitemap dans la mémoireGénération d'applications Web ASP.NET
Comment : personnaliser l'apparence des contrôles serveur Web SiteMapPathGénération d'applications Web ASP.NET
Comment : afficher des données sitemap dans des contrôles serveur Web non hiérarchiquesGénération d'applications Web ASP.NET
Comment : ajouter la navigation de site simpleGénération d'applications Web ASP.NET

L'exemple de code suivant utilise un contrôle SiteMapPath de façon déclarative dans une page Web Forms. Cet exemple présente quelques règles de priorité régissant l'ordre d'application des modèles et des styles aux nœuds 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>
    <BODY>
        <FORM 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-Name="Franklin Gothic Medium"
                NodeStyle-Font-Underline="true"
                NodeStyle-Font-Bold="true"
                RootNodeStyle-Font-Name="Symbol"
                RootNodeStyle-Font-Bold="false"
                CurrentNodeStyle-Font-Name="Verdana"
                CurrentNodeStyle-Font-Size="10pt"
                CurrentNodeStyle-Font-Bold="true"
                CurrentNodeStyle-ForeColor="red"
                CurrentNodeStyle-Font-Underline="false"
                HoverNodeStyle-ForeColor="blue"
                HoverNodeStyle-Font-Underline="true">
                <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>
    <BODY>
        <FORM 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-Name="Franklin Gothic Medium"
                NodeStyle-Font-Underline="true"
                NodeStyle-Font-Bold="true"
                RootNodeStyle-Font-Name="Symbol"
                RootNodeStyle-Font-Bold="false"
                CurrentNodeStyle-Font-Name="Verdana"
                CurrentNodeStyle-Font-Size="10pt"
                CurrentNodeStyle-Font-Bold="true"
                CurrentNodeStyle-ForeColor="red"
                CurrentNodeStyle-Font-Underline="false"
                HoverNodeStyle-ForeColor="blue"
                HoverNodeStyle-Font-Underline="true">
                <CURRENTNODETEMPLATE>
                        <asp:Image id="Image1" runat="server" ImageUrl="WebForm2.jpg" AlternateText="WebForm2"/>
                </CURRENTNODETEMPLATE>
            </asp:SiteMapPath>


        </FORM>
    </BODY>
</HTML>

L'exemple précédent utilise le fournisseur de plan de site par défaut et un fichier Web.sitemap avec la structure suivante.

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

L'exemple de code suivant montre l'extension et l'ajout de nouvelles fonctionnalités au contrôle SiteMapPath en substituant la méthode InitializeItem. Le contrôle DropDownSiteMapPath ajoute un DropDownList après le nœud actuel afin de faciliter la navigation dans les pages qui sont des nœuds enfants de la page actuelle. Cet exemple montre comment utiliser les objets SiteMapNodeItem, y compris la vérification de leurs SiteMapNodeItemType et l'appel de la méthode OnItemCreated après que les éléments soient créés.

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

  • AspNetHostingPermission  pour opérer dans un environnement hébergé. Valeur de demande : LinkDemand ; valeur d'autorisation : Minimal
  • AspNetHostingPermission  pour opérer dans un environnement hébergé. Valeur de demande : InheritanceDemand ; valeur d'autorisation : Minimal

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0
Afficher: