Como: Filtrar os nós recuperados por controles de servidor Web SiteMapDataSource
The SiteMapDataSource controle recupera dados de MAP de site do provedor de MAP de site, sistema autônomo o XmlSiteMapProvider, que é o provedor de MAP de site padrão para ASP.NET. Você pode configurar o SiteMapDataSource controle para retornar a coleção inteira de nós do MAP de site ou um subconjunto. Isso é útil ao exibir mais de uma estrutura de navegação em uma página, com cada uma mostrando uma seção distinta do mapa de site.Também é útil ao distribuir elementos de navegação do site em páginas principais distintas do seu site, onde cada página principal mostra uma parte diferente do mapa de site geral.
Para usar esses controles de navegação do site, você deve descrever a estrutura do site em um arquivo Web .sitemap e criar os arquivos .aspx listados no seu mapa de site.
Para criar um arquivo Web.sitemap
Criar um novo arquivo no diretório raiz do site e nomeie o arquivo Web.sitemap.Coloque o seguinte código necessário no seu arquivo:
<?xml version="1.0" encoding="utf-8" ?> <siteMap> </siteMap>
Criar uma raiz siteMapNode elemento como um filho do elemento siteMap, definindo os seguintes atributos:
title Atribua um título para o nó mapa de site, que será exibido como o texto de link para a página da Web.
url Atribua o URL para uma página da Web.Você pode usar uma URL totalmente qualificada ou uma URL relativa, sistema autônomo ~ / padrão.aspx.O caractere de til (~) é usado para indicar a raiz do aplicativo.Posteriormente neste procedimento, você criará páginas da Web para cada URL listado no mapa do site, pois seu aplicativo falhará se você listar uma URL que não exista (ou se você duplicar URLs).Você pode deixar este atributo vazio, mas para o propósito deste exemplo, defina como um arquivo .aspx que você possa editar.
Observação: Só pode haver um elemento raiz siteMapNode em um mapa de site, mas essa raiz pode conter qualquer número de elementos siteMapNode filho.
Crie um elemento siteMapNode como um filho do elemento siteMapNode raiz.Defina os mesmos atributos como na etapa anterior.
Crie um elemento siteMapNode como um filho do elemento siteMapNode anterior.Defina os mesmos atributos como na etapa anterior.Para fins deste exemplo, o mapa de site deve ter três níveis de elementos siteMapNode.
O arquivo Web.sitemap será semelhante ao seguinte exemplo:
<?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>
Salve o arquivo Web.sitemap e feche.
Para adicionar navegação de site a uma página da Web
Crie uma página .aspx para cada um dos arquivos que você listou nos atributos url do arquivo Web.sitemap.Em cada um dos arquivos .aspx, substitua o código a seguir para exibir o mapa do site em vários controles que exibem dados de mapa de sites.Se um arquivo .aspx não estiver listado no mapa do site, não é possível exibir um controle de navegação 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>
Salve os arquivos.
Para alterar o nó inicial retornado ao controle de navegação
Na página .aspx que está três níveis mais fundo em seu mapa do site, localize o controle SiteMapDataSource, que pode parecer com o seguinte linha de código:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Altere a linha de código acima para ficar como o seguinte:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" StartingNodeUrl="~/Services.aspx" />
Salve seu arquivo e veja em um navegador.
A estrutura de navegação na página Training.aspx é diferente das outras duas páginas.As estruturas começam no segundo nó.O controle SiteMapPath é afetado porque ele obtém dados de mapa de site diretamente do provedor e não precisa de um controle SiteMapDataSource.
A seguir existem outras opções para alterar o nó inicial:
- Definir a propriedade StartFromCurrentNode como true recupera a estrutura de mapa de site, começando com o nó para a página atual.
Configurar a propriedade StartingNodeOffset para 2 recupera a estrutura de mapa de site, começando com dois nós mais fundos a partir do nó raiz e seguindo o caminho para a página atual.
Para ocultar o nó inicial
Na página .aspx que está três níveis mais fundo em seu mapa do site, localize o controle SiteMapDataSource, que pode parecer com o seguinte linha de código:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
Altere a linha de código acima para ficar como o seguinte:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" ShowStartingNode="~/Services.aspx" />
Salve seu arquivo e veja em um navegador.
A estrutura de navegação nesta página é diferente das outras duas páginas.O resultado é diferente de configurar a propriedade StartingNodeOffset para 1 ou definir a propriedade StartingNodeUrl para ~/Services.aspx, pois a coleção de nó de mapa de sites não está restrito a uma ramificação do mapa do site inteiro, que permite que você visualize o nó Produtos também.
Observação: Você também pode definir a propriedade StartingNodeOffset para um número negativo se o nó inicial estiver aninhado mais profundo que o nó raiz da mapa do site.Isso geralmente é útil quando a propriedade StartFromCurrentNode é definida como true e você deseja exibir o mapa do site a partir do pai do nó atual.
Consulte também
Tarefas
Como: Personalizar a aparência de controles de servidor Web SiteMapPath
Conceitos
Implementando provedores site-Map em ASP.NET
Cortes de segurança em mapas de site no ASP.NET
Tornando navegação em sites do ASP.NET seguro