Figura 1: Estructura del sitio web |
Figura 2: Agregar un nuevo mapa del sitio |
<?xml versión="1.0" codificación="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Inicio" descripción="Mi sitio web"> <siteMapNode url="~/products/default.aspx" title="Productos"> <siteMapNode url="~/products/product1.aspx" title="Primer producto" /> <siteMapNode url="~/products/product2.aspx" title="Segundo producto" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Servicios"> <siteMapNode url="~/services/service1.aspx" title="Primer servicio" /> <siteMapNode url="~/services/service2.aspx" title="Segundo servicio" /> </siteMapNode> <siteMapNode url="contacto.aspx" title="Contáctenos" /> </siteMapNode> </mapa del sitio> |
de descripción | de la propiedad |
muestra | el título de la página. Los controles de navegación suelen utilizar esta propiedad para mostrar el título de la URL. |
url | muestra la URL de la página descrita por este nodo. |
descripción | especifica una descripción sobre esta página. Puede utilizar esta descripción para mostrar el contenido del mensaje. |
roles | Al utilizar el recorte de seguridad (que se analiza más adelante), este atributo especifica los roles a los que se les permite acceder a esta página. |
Figura 3: Navegación de ruta de navegación |
Carpeta | de nombre del formulario web |
Default.aspx | Raíz del sitio web |
Contact.aspx | Raíz del sitio web |
Default.aspx | Productos |
Producto1.aspx | Productos |
Producto2.aspx | Productos |
Default.aspx | Servicios |
Servicio1.aspx | Servicios |
Servicio2.aspx | Servicios |
<%@ Lenguaje maestro="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Hereda="MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <cabeza runat="servidor"> <título>Página sin título</título> </cabeza> <cuerpo> <form id="form1" runat="servidor"> <div> <asp:Label ID="Label1" runat="servidor" Font-Size="XX-Large" ForeColor="Blue" Text="¡Bienvenido!"></asp:Label><br /> <asp:SiteMapPath ID="SiteMapPath1" runat="servidor" Font-Names="Verdana" Font-Size="0.8em" PathSeparator=": "> <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 id="ContentPlaceHolder1" runat="servidor"> </asp:contentplaceholder> </div> </formulario> </cuerpo> </html> |
Figura 4: Ejecución de muestra de Default.aspx |
ID de hipervínculo Propiedad | de texto Propiedad | NavigateUrl |
Productos | HyperLink1 | ~/products/default.aspx |
Servicios | HyperLink2 | ~/Services/default.aspx |
HyperLink3 | Contáctenos | ~/contact.aspxTabla |
<%@ Idioma de página="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Hereda = "_Default" Título = "Página sin título" %> <asp:ID de contenido="Contenido1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Servidor"> <centro> <tabla> <tr> <td ancho="60%"> <asp:Label ID="Label1" runat="servidor" Font-Size="XL" Text="¡Bienvenido a nuestro sitio web!"></asp:Label></td> </tr> <tr> <td ancho="60%"> <asp:HyperLink ID="HyperLink1" runat="servidor" Font-Size="X-Large" NavigateUrl="~/Products/Default.aspx">Productos </asp:HyperEnlace></td> </tr> <tr> <td ancho="60%"> <asp:HyperLink ID="HyperLink2" runat="servidor" Font-Size="XL" NavigateUrl="~/Services/Default.aspx">Servicios </asp:HyperEnlace></td> </tr> <tr> <td ancho="60%"> <asp:HyperLink ID="HyperLink3" runat="servidor" Font-Size="X-Large" NavigateUrl="~/Contact.aspx">Contáctenos </asp:HyperEnlace></td> </tr> </mesa> </centro> </asp:Contenido> |
Figura 5: Página predeterminada de la carpeta Productos |
ID de hipervínculo Propiedad | de texto Propiedad | NavigateUrl |
Primer producto | HyperLink1 | ~/products/product1.aspx |
HyperLink2 | Segundo producto | ~/products/product2.aspx |
Figura 6. Página predeterminada de la carpeta Servicios |
ID de hipervínculo Propiedad | de texto Propiedad | NavigateUrl |
Primer servicio | HyperLink1 | ~/Services/service1.aspx |
Segundo servicio | HyperLink2 | ~/Services/service2.aspx |
Atributo de texto del | nombre del formulario web | Etiqueta
~/Contact.aspx | Contáctenos |
~/Products/Product1.aspx | Detalles del primer producto |
~/Products/Product2.aspx | Detalles del segundo producto |
~/Services/Service1.aspx | Detalles del primer servicio |
~/Services/Service2. aspx | Segundo formulario de detalles del servicio |
Figura 7: Ejecución de muestra de Product1.aspx |
Observe cómo los atributos de título y URL del archivo web.sitemap se utilizan para generar "rutas de navegación". Además, observe cómo se muestra el padre junto con el título de la página actual. Intente navegar a varias páginas y observar el control SiteMapPath.
4. Utilice el control de fuente de datos de SiteMap
El uso de mapas del sitio no se limita al control SiteMapPath. También puede adjuntar un mapa del sitio a un control navegable (como TreeView). En el siguiente ejemplo, utilizará el mismo archivo de mapa del sitio para implementar el enlace a un control TreeView.
Agregue un nuevo formulario web SiteMapDataSourceDemo.aspx al sitio web. Luego, arrastre un control de fuente de datos SiteMap (SiteMapDataSource1) y un control TreeView (TreeView1) al formulario. Establezca la propiedad DataSourceID de este control TreeView en SiteMapDataSource1. Además, establezca la propiedad ShowLines del control TreeView en verdadero. Aquí está el marcado completo de la página SiteMapDataSourceDemo.aspx:
<%@ Idioma de página="C#" AutoEventWireup="true" CodeFile="SiteMapDataSourceDemo.aspx.cs" Hereda="SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <cabeza runat="servidor"> <título>Página sin título</título> </cabeza> <cuerpo> <form id="form1" runat="servidor"> <asp:TreeView ID="TreeView1" runat="servidor" DataSourceID="SiteMapDataSource1" MostrarLineas="Verdadero"> </asp:TreeView> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="servidor" /> </formulario> </cuerpo> </html> |
Ahora, ejecute el formulario web para ver cómo se genera automáticamente la misma estructura de navegación en TreeView (consulte la Figura 8).
Figura 8: Vincular el archivo del mapa del sitio a un control TreeView |
Descripción | de la propiedad |
ChildNodes | representa la colección de todos los nodos secundarios del nodo actual |
HasChildNodes | indica si el nodo del mapa del sitio tiene nodos secundarios (verdadero/falso) |
El título | devuelve el valor del atributo de título especificado en el archivo del mapa del sitio |
La URL | devuelve en el archivo del mapa del sitio El valor del atributo de URL especificado |
Descripción | devuelve el valor del atributo de descripción especificado en el archivo del mapa del sitio |
ParentNode | indica la referencia del nodo del mapa del sitio principal del nodo actual |
Page_Load vacío protegido (remitente del objeto, EventArgs e) { int recuento = SiteMap.RootNode.ChildNodes.Count; para (int i = 0; i < contar; 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; para (int j = 0; j < childCount; j++) { SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = nuevo TreeNode(smChildNode.Title, "", "", smChildNode.Url, ""); tvNode.ChildNodes.Add(tvChildNode); } } } } |
Aquí, primero obtiene el número total de nodos secundarios en el nodo raíz. Luego, recorre la colección ChildNodes del nodo raíz. En cada iteración, crea una nueva instancia de la clase TreeNode y especifica su título y URL en su constructor. Luego, agrega este TreeNode a la colección de nodos de TreeView. Luego, verifica si el SiteMapNode actual tiene nodos secundarios. Si lo hay, lo recorre y repite el proceso de creación de TreeNode. Tenga en cuenta que esta vez agrega los nuevos TreeNodes a la colección ChildNodes del objeto TreeNode actual.
Tenga en cuenta que utiliza 2 en el bucle porque sabe que sólo hay dos niveles de anidamiento. Para hacer que su lógica sea más general, puede usar la recursividad para completar TreeView.
Ejecute el formulario web y verá nuevamente algo similar a la Figura 8.
6. Utilice mantenimiento de seguridad
A menudo, los sitios web implementan un modelo de seguridad basado en roles. Por ejemplo, puede tener diferentes roles en su aplicación, como administrador del sistema, probador de productos y probador de servicios. En situaciones como esta, a menudo es necesario controlar los enlaces de navegación del sitio que se muestran a los usuarios. Por ejemplo, si el usuario que ha iniciado sesión actualmente tiene la función de probador de productos, es posible que desee mostrar solo enlaces relacionados con el producto y ocultar cualquier otro enlace. Una forma de manejar roles es utilizar codificación manual; sin embargo, requiere implementar toda la lógica de autorización mediante programación. Afortunadamente, los archivos de mapas del sitio y el control de fuente de datos de SiteMap juntos brindan una función llamada recorte de seguridad para ayudarlo.
Para probar la revisión de seguridad, debe habilitar las funciones de membresía y función de su sitio. Abra el archivo web.config y agregue las siguientes etiquetas:
<modo de autenticación="Formularios" /> <autorización> <denegar usuarios="?"></denegar> </autorización> |
<roleManager habilitado="true" /> |
Figura 9: Agregar roles usando herramientas de administración de sitios web |
Figura 10: Creación de usuarios utilizando herramientas de administración de sitios web |
<?xml versión="1.0" codificación="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Inicio" descripción="Mi sitio web"> <siteMapNode title="Productos" roles="ProductTesters"> <siteMapNode url="~/products/product1.aspx" title="Primer producto" /> <siteMapNode url="~/products/product2.aspx" title="Segundo producto" /> </siteMapNode> <siteMapNode title="Servicios" roles="ServiceTesters"> <siteMapNode url="~/services/service1.aspx" title="Primer servicio" /> <siteMapNode url="~/services/service2.aspx" title="Segundo servicio" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Contáctenos" /> </siteMapNode> </mapa del sitio> |
<siteMap defaultProvider="miproveedor" habilitado="true"> <proveedores> <añadir nombre="miproveedor" tipo="System.Web.XmlSiteMapProvider" siteMapFile="Recorte de seguridad.mapa del sitio" seguridadTrimmingEnabled="true" /> </proveedores> |
Figura 11: Página de inicio de sesión |
Figura 12: Utilice la restauración de seguridad |