Comment : filtrer les nœuds récupérés par les contrôles serveur Web SiteMapDataSource
Mise à jour : novembre 2007
Le contrôle SiteMapDataSource récupère les données sitemap d'un fournisseur, par exemple XmlSiteMapProvider, qui est le fournisseur sitemap par défaut d'ASP.NET. Vous pouvez configurer le contrôle SiteMapDataSource pour retourner l'intégralité de la collection de nœuds sitemap ou d'un sous-ensemble. Cette méthode s'avère utile lorsque vous affichez plusieurs structures de navigation sur une page, chacune d'elle affichant une section différente du plan de site. Elle est également utile lorsque vous distribuez des éléments de navigation de site sur des pages maîtres distinctes de votre site où chacune d'entre elles affiche une portion différente du plan de site global.
Pour utiliser ces contrôles de navigation de site, vous devez décrire la structure du site dans un fichier Web.sitemap et créer les fichiers .aspx répertoriés dans votre plan de site.
Pour créer un fichier Web.sitemap
Créez un fichier dans le répertoire racine de votre site Web et nommez le fichier Web.sitemap. Placez le code requis suivant dans votre fichier :
<?xml version="1.0" encoding="utf-8" ?> <siteMap> </siteMap>
Créez un élément siteMapNode racine en tant qu'enfant de l'élément siteMap, en définissant les attributs suivants :
title Assignez un titre au nœud sitemap qui sera affiché en tant que texte de lien de la page Web.
url Assignez l'URL d'une page Web. Vous pouvez utiliser une URL qualifiée complète ou une URL relative telle que ~/Default.aspx. Le caractère tilde (~) permet d'indiquer la racine de l'application. Plus loin dans cette procédure, vous allez créer des pages Web pour chaque URL répertoriée dans le plan de site parce que votre application échoue si vous répertoriez une URL qui n'existe pas (ou si vous dupliquez des URL). Vous pouvez laisser cet attribut vide, mais pour les besoins de cet exemple, affectez-lui un fichier .aspx que vous pouvez modifier.
Remarque : Il ne peut exister qu'un seul un élément siteMapNode racine dans un plan de site, mais cette racine peut contenir un nombre indéterminé d'éléments siteMapNode enfants.
Créez un élément siteMapNode en tant qu'enfant de l'élément siteMapNode racine. Définissez les mêmes attributs que ceux de l'étape précédente.
Créez un élément siteMapNode en tant qu'enfant de l'élément siteMapNode précédent. Définissez les mêmes attributs que ceux de l'étape précédente. Pour les besoins de cet exemple, le plan de site doit avoir trois niveaux d'éléments siteMapNode.
Le fichier Web.sitemap ressemblera à l'exemple suivant :
<?xml version="1.0" encoding="utf-8" ?> <siteMap> <siteMapNode title="Home" url="~/Default.aspx" roles="*"> <siteMapNode title="Services" url="~/Services.aspx " > <siteMapNode title="Training" url="~/Training.aspx" /> </siteMapNode> <siteMapNode title="Products" url="" /> </siteMapNode> </siteMap>
Enregistrez le fichier Web.sitemap et fermez-le.
Pour ajouter une navigation de site à une page Web
Créez une page .aspx pour chacun des fichiers que vous avez répertoriés dans les attributs url de votre fichier Web.sitemap. Dans chaque fichier .aspx, remplacez le code par l'élément suivant pour afficher le plan de site dans plusieurs contrôles affichant des données sitemap. Si un fichier .aspx n'est pas répertorié dans le plan de site, il ne peut pas afficher de contrôle de navigation de site.
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <div> <h2>Using SiteMapPath</h2> <asp:SiteMapPath ID="SiteMapPath1" Runat="server"> </asp:SiteMapPath> <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" /> <h2>Using TreeView</h2> <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1"> </asp:TreeView> <h2>Using Menu</h2> <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"> </asp:Menu> <h2>Using a Horizontal Menu</h2> <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" StaticDisplayLevels="2" > </asp:Menu> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <div> <h2>Using SiteMapPath</h2> <asp:SiteMapPath ID="SiteMapPath1" Runat="server"> </asp:SiteMapPath> <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" /> <h2>Using TreeView</h2> <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1"> </asp:TreeView> <h2>Using Menu</h2> <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"> </asp:Menu> <h2>Using a Horizontal Menu</h2> <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" StaticDisplayLevels="2" > </asp:Menu> </div> </form> </body> </html>
Enregistrez vos fichiers.
Pour modifier le nœud de démarrage retourné au contrôle de navigation
Dans la page .aspx qui dispose de trois niveaux d'imbrication dans votre plan de site, recherchez le contrôle SiteMapDataSource qui peut ressembler à la ligne de code suivante :
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Modifiez la ligne de code ci-dessus jusqu'à ce qu'elle ressemble à la ligne ci-dessous :
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" StartingNodeUrl="~/Services.aspx" />
Enregistrez votre fichier et affichez-le dans un navigateur.
La structure de navigation de la page Training.aspx est différente des deux autres pages. Les structures commencent au deuxième nœud. Le contrôle SiteMapPath est non affecté parce qu'il obtient directement les données sitemap du fournisseur et n'a pas besoin d'un contrôle SiteMapDataSource.
Les autres options suivantes existent pour la modification du nœud de démarrage :
- L'affectation de la valeur true à la propriété StartFromCurrentNode permet de récupérer la structure sitemap, en commençant par le nœud de la page actuelle.
L'affectation de la valeur 2 à la propriété StartingNodeOffset permet de récupérer la structure sitemap, en commençant par deux nœuds à partir du nœud racine et suivant le chemin d'accès à la page actuelle.
Pour masquer le nœud de démarrage
Dans la page .aspx qui dispose de trois niveaux d'imbrication dans votre plan de site, recherchez le contrôle SiteMapDataSource qui peut ressembler à la ligne de code suivante :
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Modifiez la ligne de code ci-dessus jusqu'à ce qu'elle ressemble à la ligne ci-dessous :
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" ShowStartingNode="~/Services.aspx" />
Enregistrez votre fichier et affichez-le dans un navigateur.
La structure de navigation de cette page est différente des deux autres pages. Le résultat est différent selon que la propriété StartingNodeOffset a la valeur 1 ou que ~/Services.aspx est affecté à la propriété StartingNodeUrl parce que la collection de nœuds sitemap n'est pas limitée à une seule branche du plan de site tout entier, ce qui vous permet également de consulter le nœud Products.
Remarque : Vous pouvez également affecter une valeur négative à la propriété StartingNodeOffset si le nœud de démarrage est plus imbriqué que le nœud racine du plan de site. Cette action est souvent utile lorsque la valeur true est affectée à la propriété StartFromCurrentNode et que vous souhaitez afficher le plan de site en commençant par le parent du nœud actuel.
Voir aussi
Tâches
Comment : personnaliser l'apparence des contrôles serveur Web SiteMapPath
Concepts
Implémentation de fournisseurs sitemap ASP.NET
Suppression de la sécurité sitemap ASP.NET
Sécurisation de la navigation de site ASP.NET
Sécurisation de l'accès aux données
Autres ressources
Sécurité des applications ASP.NET dans les environnements hébergés