Cómo: Filtrar los nodos recuperados por controles SiteMapDataSource de servidor Web
Actualización: noviembre 2007
El control SiteMapDataSource recupera los datos del mapa del sitio de un proveedor de mapas de sitio, como XmlSiteMapProvider, que es el proveedor predeterminado de ASP.NET. Puede configurar el control SiteMapDataSource para que devuelva una colección completa de los nodos del mapa del sitio o simplemente un subconjunto. Esto resulta útil cuando se muestran varias estructuras de exploración en una página, y cada una aparece en una sección diferente del mapa del sitio. También es útil cuando se distribuyen elementos de exploración del sitio por diferentes páginas principales del sitio, y cada página principal muestra una parte diferente del mapa del sitio total.
Para utilizar estos controles de exploración, debe describir la estructura del sitio en un archivo Web.sitemap y crear los archivos .aspx que aparecen en el mapa del sitio.
Para crear un archivo Web.sitemap
Cree un nuevo archivo en el directorio raíz de su sitio Web y llámelo Web.sitemap. Sitúe en el archivo el código que se muestra a continuación:
<?xml version="1.0" encoding="utf-8" ?> <siteMap> </siteMap>
Cree un elemento siteMapNode raíz como elemento secundario de siteMap, y defina los atributos siguientes:
title Asigne un título al nodo del mapa del sitio, que se mostrará como el texto del vínculo de la página Web.
url Asigne la dirección URL de una página Web. Puede utilizar una dirección URL completa o relativa como ~/Default.aspx. El carácter de tilde (~) se utiliza para indicar la raíz de la aplicación. Después en este procedimiento, creará las páginas Web de cada dirección URL que aparezca en el mapa del sitio, porque si muestra una dirección URL que no existe (o duplica direcciones URL), se producirá un error en la aplicación. Puede dejar este atributo vacío, aunque por la finalidad de este ejemplo, de establecerlo en un archivo .aspx que puede editar.
Nota: Sólo puede haber un elemento siteMapNode raíz en un mapa del sitio, pero este elemento raíz puede contener cualquier número de elementos siteMapNode secundarios.
Cree un elemento siteMapNode como elemento secundario del elemento siteMapNode raíz. Establezca los mismos atributos que en el paso anterior.
Cree un elemento siteMapNode como elemento secundario del elemento siteMapNode anterior. Establezca los mismos atributos que en el paso anterior. Por la finalidad de este ejemplo, el mapa del sitio debe tener tres niveles de elementos siteMapNode.
El archivo Web.sitemap será similar al del ejemplo siguiente:
<?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>
Guarde el archivo Web.sitemap y ciérrelo.
Para agregar la exploración del sitio a una página Web
Cree una página .aspx para cada uno de los archivos que aparecen en los atributos url del archivo Web.sitemap. En cada uno de los archivos .aspx, sustituya el código existente por el código siguiente para que el mapa del sitio aparezca en varios controles que muestren los datos del mapa del sitio. Si un archivo .aspx no aparece en el mapa del sitio, no puede mostrar un control de exploración del sitio.
<%@ 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>
Guarde los archivos.
Para cambiar el nodo de inicio devuelto por el control de exploración
En la página .aspx, que está en el tercer nivel del sitio, busque el control SiteMapDataSource, que podría tener un aspecto similar al de la línea de código siguiente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Cambie la línea de código anterior para que se parezca a la siguiente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" StartingNodeUrl="~/Services.aspx" />
Guarde el archivo y ábralo en un explorador.
La estructura de exploración de la página Training.aspx es diferente a la de las otras dos páginas. Las estructuras comienzan en el segundo nodo. El control SiteMapPath no se ve afectado porque obtiene los datos del mapa del sitio directamente del proveedor y no necesita un control SiteMapDataSource.
Existen otras opciones para cambiar el nodo de inicio:
- Al establecer la propiedad StartFromCurrentNode en true, se recupera la estructura de mapa del sitio, comenzando con el nodo de la página actual.
Al establecer la propiedad StartingNodeOffset en 2, se recupera la estructura de mapa del sitio, comenzando con los dos nodos embebidos en el nodo raíz y siguiendo por la ruta de acceso a la página actual.
Para ocultar el nodo de inicio
En la página .aspx, que está en el tercer nivel del sitio, busque el control SiteMapDataSource, que podría tener un aspecto similar al de la línea de código siguiente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Cambie la línea de código anterior para que se parezca a la siguiente:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" ShowStartingNode="~/Services.aspx" />
Guarde el archivo y ábralo en un explorador.
La estructura de exploración de esta página es diferente a la de las otras dos páginas. El resultado es diferente si se establece la propiedad StartingNodeOffset en 1 o si se establece la propiedad StartingNodeUrl en ~/Services.aspx, ya que la colección de nodos del mapa del sitio no está limitada a una bifurcación del mapa del sitio completo, lo que le permite ver también el nodo Products.
Nota: También puede establecer la propiedad StartingNodeOffset en un número negativo si el nodo de inicio está más anidado que el nodo raíz del mapa del sitio. Normalmente, esta operación resulta útil cuando la propiedad StartFromCurrentNode está establecida en true y desea mostrar el mapa del sitio comenzando por el elemento principal del nodo actual.
Vea también
Tareas
Cómo: Personalizar la apariencia de los controles SiteMapPath de servidor Web
Conceptos
Implementar proveedores de mapas de sitio de ASP.NET
Reducción de seguridad del mapa del sitio de ASP.NET
Proteger la exploración del sitio de ASP.NET
Otros recursos
Seguridad de aplicaciones ASP.NET en entornos alojados en host