Figure 1 : Structure du site Web |
Figure 2 : Ajout d'un nouveau plan de site |
<?xml version="1.0" encodage="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Accueil" description="Mon site Web"> <siteMapNode url="~/products/default.aspx" title="Produits"> <siteMapNode url="~/products/product1.aspx" title="Premier produit" /> <siteMapNode url="~/products/product2.aspx" title="Deuxième produit" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Services"> <siteMapNode url="~/services/service1.aspx" title="Premier service" /> <siteMapNode url="~/services/service2.aspx" title="Deuxième service" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Contactez-nous" /> </siteMapNode> </plan du site> |
de la description | de la propriété |
affiche | le titre de la page. Cette propriété est souvent utilisée par les contrôles de navigation pour afficher le titre de l'URL. |
url | affiche l'URL de la page décrite par ce nœud. |
description | spécifie une description de cette page. Vous pouvez utiliser cette description pour afficher le contenu de l'invite. |
rôles | En utilisant le découpage de sécurité (discuté plus tard), cet attribut spécifie les rôles qui sont autorisés à accéder à cette page. |
Figure 3 : Navigation dans le fil d'Ariane |
Dossier | de nom du formulaire Web |
Default.aspx | Racine du site Web |
Contact.aspx | Racine du site Web |
Default.aspx | Produits |
Product1.aspx | Produits |
Product2.aspx | Produits |
Default.aspx | Services |
Service1.aspx | Services |
Service2.aspx | Services |
<%@ Langage maître="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="serveur"> <titre>Page sans titre</titre> </tête> <form id="form1" runat="serveur"> <asp:Label ID="Label1" runat="server" Font-Size="XX-Large" ForeColor="Blue" Text="Bienvenue !"></asp:Label><br /> <PathSeparatorStyle Font-Bold="True" ForeColor="#5D7B9D" /> <CurrentNodeStyle ForeColor="#333333" /> <NodeStyle Font-Bold="True" ForeColor="#7C6F57" /> <RootNodeStyle Font-Bold="True" ForeColor="#5D7B9D" /> </asp:SiteMapPath> <br /> <br /> </asp:contentplaceholder> </div> </formulaire> </corps> </html> |
Figure 4 : Exemple d'exécution de Default.aspx |
Propriété de texte | ID HyperLink | Propriété NavigateUrl |
Produits | HyperLink1 | ~/products/default.aspx |
Services | HyperLink2 | ~/Services/default.aspx |
HyperLink3 | Contactez-nous | ~/contact.aspxTableau |
<%@ Langage de la page="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Héritage="_Default" Title="Page sans titre" %> <centre> <tr> <td largeur="60%"> </tr> <tr> <td largeur="60%"> </asp:HyperLien></td> </tr> <tr> <td largeur="60%"> </asp:HyperLien></td> </tr> <tr> <td largeur="60%"> </asp:HyperLien></td> </tr> </tableau> </centre> </asp:Contenu> |
Figure 5 : Page par défaut du dossier Produits |
Propriété de texte | ID HyperLink | Propriété NavigateUrl |
HyperLink1 | Premier produit | ~/products/product1.aspx |
HyperLink2 | Deuxième produit | ~/products/product2.aspx |
Figure 6. Page par défaut du dossier Services |
Propriété de texte | ID HyperLink | Propriété NavigateUrl |
HyperLink1 | First Service | ~/Services/service1.aspx |
HyperLink2 | Second Service | ~/Services/service2.aspx |
Attribut texte du | nom du formulaire Web | Étiquette
~/Contact.aspx | Contactez-nous |
~/Products/Product1.aspx | Premiers détails du produit |
~/Products/Product2.aspx | Deuxième détails du produit |
~/Services/Service1.aspx | Premiers détails du service |
~/Services/Service2. aspx | Deuxième formulaire de détails du service |
Figure 7 : Exemple d’exécution de Product1.aspx |
Remarquez comment les attributs de titre et d'URL du fichier web.sitemap sont utilisés pour générer un « fil d'Ariane ». Notez également comment le parent est affiché avec le titre de la page actuelle. Essayez de naviguer vers différentes pages et d'observer le contrôle SiteMapPath.
4. Utilisez le contrôle de source de données SiteMap
L'utilisation de plans de site n'est pas limitée au contrôle SiteMapPath. Vous pouvez également joindre un plan du site à un contrôle navigable (tel qu'un TreeView). Dans l'exemple suivant, vous utiliserez le même fichier de plan de site pour implémenter la liaison à un contrôle TreeView.
Ajoutez un nouveau formulaire Web SiteMapDataSourceDemo.aspx au site Web. Ensuite, faites glisser un contrôle de source de données SiteMap (SiteMapDataSource1) et un contrôle TreeView (TreeView1) sur le formulaire. Définissez la propriété DataSourceID de ce contrôle TreeView sur SiteMapDataSource1. De plus, définissez la propriété ShowLines du contrôle TreeView sur true. Voici le balisage complet de la page SiteMapDataSourceDemo.aspx :
<%@ Langage de la page="C#" AutoEventWireup="true" CodeFile="SiteMapDataSourceDemo.aspx.cs" Héritage="SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="serveur"> <titre>Page sans titre</titre> </tête> <form id="form1" runat="serveur"> </asp:TreeView> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /> </formulaire> </corps> </html> |
Maintenant, exécutez le formulaire Web pour voir comment la même structure de navigation est automatiquement générée dans TreeView (voir Figure 8).
Figure 8 : Liaison du fichier de plan du site à un contrôle TreeView |
Description | de la propriété |
ChildNodes | représente la collection de tous les nœuds enfants du nœud actuel. |
HasChildNodes | indique si le nœud du plan du site a des nœuds enfants (vrai/faux). |
Title | renvoie la valeur de l'attribut title spécifié dans le fichier de plan du site. |
L'URL | renvoie dans le fichier de plan du site. La valeur de l'attribut url spécifié |
Description | renvoie la valeur de l'attribut description spécifié dans le fichier de plan du site |
ParentNode | indique la référence du nœud de plan de site parent du nœud actuel |
protected void Page_Load (expéditeur de l'objet, EventArgs e) { int count = SiteMap.RootNode.ChildNodes.Count; pour (int i = 0; i < nombre; i++) { SiteMapNode smNode=SiteMap.RootNode.ChildNodes[i]; TreeNode tvNode = new TreeNode(smNode.Title, "", "", smNode.Url, ""); TreeView1.Nodes.Add(tvNode); si (smNode.HasChildNodes) { int childCount=smNode.ChildNodes.Count; pour (int j = 0; j < childCount; j++) { SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = nouveau TreeNode(smChildNode.Title, "", "", smChildNode.Url, ""); tvNode.ChildNodes.Add(tvChildNode); } } } } |
Ici, vous obtenez d’abord le nombre total de nœuds enfants dans le nœud racine. Ensuite, vous parcourez la collection ChildNodes du nœud racine. A chaque itération, vous créez une nouvelle instance de la classe TreeNode et spécifiez son titre et son URL dans son constructeur. Ensuite, vous ajoutez ce TreeNode à la collection Nodes de TreeView. Ensuite, vous vérifiez si le SiteMapNode actuel a des nœuds enfants. Si tel est le cas, vous le parcourez et répétez le processus de création de TreeNode. Notez que cette fois, vous ajoutez les nouveaux TreeNodes à la collection ChildNodes de l'objet TreeNode actuel.
Notez que vous utilisez 2 dans la boucle car vous savez qu'il n'y a que deux niveaux d'imbrication. Pour rendre votre logique plus générale, vous pouvez utiliser la récursivité pour remplir le TreeView.
Exécutez le formulaire Web et vous verrez à nouveau quelque chose de similaire à la figure 8.
6. Utilisez la maintenance de sécurité
Souvent, les sites Web mettent en œuvre un modèle de sécurité basé sur les rôles. Par exemple, vous pouvez avoir différents rôles dans votre application, tels qu'administrateur système, testeur de produits et testeur de services. Dans des situations comme celle-ci, vous devez souvent contrôler les liens de navigation du site qui sont affichés aux utilisateurs. Par exemple, si l'utilisateur actuellement connecté a le rôle de testeur de produit, vous souhaiterez peut-être afficher uniquement les liens liés au produit et masquer tous les autres liens. Une façon de gérer les rôles consiste à utiliser le codage manuel, mais cela nécessite la mise en œuvre de toute la logique d'autorisation par programme. Heureusement, les fichiers de plan de site et le contrôle de source de données SiteMap fournissent ensemble une fonctionnalité appelée ajustement de sécurité pour vous aider.
Afin de tester la refonte de la sécurité, vous devez activer les fonctionnalités d'adhésion et de rôle de votre site. Ouvrez le fichier web.config et ajoutez les balises suivantes :
<mode d'authentification="Formulaires" /> <autorisation> <deny utilisateurs="?"></deny> </autorisation> |
<roleManager activé="true" /> |
Figure 9 : Ajout de rôles à l'aide des outils de gestion de site Web |
Figure 10 : Création d'utilisateurs à l'aide des outils de gestion de sites Web |
<?xml version="1.0" encodage="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Accueil" description="Mon site Web"> <siteMapNode title="Produits" rôles="ProductTesters"> <siteMapNode url="~/products/product1.aspx" title="Premier produit" /> <siteMapNode url="~/products/product2.aspx" title="Deuxième produit" /> </siteMapNode> <siteMapNode title="Services" rôles="ServiceTesters"> <siteMapNode url="~/services/service1.aspx" title="Premier service" /> <siteMapNode url="~/services/service2.aspx" title="Deuxième service" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Contactez-nous" /> </siteMapNode> </plan du site> |
<prestataires> <ajouter un nom="monfournisseur" type="System.Web.XmlSiteMapProvider" siteMapFile="SecurityTrimming.sitemap" securityTrimmingEnabled="true" /> </prestataires> |
Figure 11 : Page de connexion |
Figure 12 : Utiliser la remise à neuf de sécurité |