Figura 1: Estrutura do site |
Figura 2: Adicionando um novo mapa do site |
<?xml versão="1.0" codificação="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Home" description="Meu site"> <siteMapNode url="~/products/default.aspx" title="Produtos"> <siteMapNode url="~/products/product1.aspx" title="Primeiro Produto" /> <siteMapNode url="~/products/product2.aspx" title="Segundo produto" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Serviços"> <siteMapNode url="~/services/service1.aspx" title="Primeiro serviço" /> <siteMapNode url="~/services/service2.aspx" title="Segundo serviço" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Fale Conosco" /> </siteMapNode> </siteMap> |
da descrição | da propriedade |
exibe | o título da página. Esta propriedade é frequentemente usada por controles de navegação para exibir o título da URL. |
url | exibe o URL da página descrita por este nó. |
description | especifica uma descrição sobre esta página. Você pode usar esta descrição para exibir o conteúdo do prompt. |
funções | Ao usar o corte de segurança (discutido posteriormente), esse atributo especifica as funções que têm permissão para acessar esta página. |
Figura 3: Navegação estrutural |
Pasta | de nome do formulário da Web |
Default.aspx | Raiz do site |
Contact.aspx | Raiz do site |
Default.aspx | Produtos |
Produto1.aspx | Produtos |
Produto2.aspx | Produtos |
Default.aspx | Serviços |
Service1.aspx | Serviços |
Service2.aspx | Serviços |
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="servidor"> <title>Página sem título</title> </cabeça> <form id="form1" runat="servidor"> <asp:Label ID="Label1" runat="server" Font-Size="XX-Large" ForeColor="Blue" Text="Bem-vindo!"></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> </formulário> </corpo> </html> |
Figura 4: Exemplo de execução de Default.aspx |
HyperLink ID | Propriedade de texto Propriedade | NavigateUrl |
HyperLink1 | Produtos | ~/products/default.aspx |
HyperLink2 | Serviços | ~/Services/default.aspx |
HyperLink3 | Contate-nos | ~/contact.aspxTabela |
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup = "true" CodeFile = "Default.aspx.cs" Inherits="_Default" Title="Página sem título" %> <centro> <tr> <largura td="60%"> </tr> <tr> <largura td="60%"> </asp:HyperLink></td> </tr> <tr> <largura td="60%"> </asp:HyperLink></td> </tr> <tr> <largura td="60%"> </asp:HyperLink></td> </tr> </tabela> </centro> </asp:Conteúdo> |
Figura 5: Página padrão da pasta Produtos |
ID do hiperlink Propriedade | de texto Propriedade | NavigateUrl |
HyperLink1 | Primeiro produto | ~/products/product1.aspx |
HyperLink2 | Segundo produto | ~/products/product2.aspx |
Figura 6. Página padrão da pasta Serviços |
HyperLink ID | Propriedade de texto Propriedade | NavigateUrl |
HyperLink1 | Primeiro serviço | ~/Services/service1.aspx |
HyperLink2 | Segundo serviço | ~/Services/service2.aspx |
Atributo de texto do | nome do formulário da Web | Rótulo
~/Contact.aspx | Entre em contato conosco |
~/Products/Product1.aspx | Detalhes do primeiro produto |
~/Products/Product2.aspx | Detalhes do segundo produto |
~/Services/Service1.aspx | Detalhes do primeiro serviço |
~/Services/Service2. aspx | Formulário 6de detalhes do segundo serviço |
Figura 7: Exemplo de execução de Product1.aspx |
Observe como os atributos de título e URL do arquivo web.sitemap são usados para gerar "breadcrumbs". Além disso, observe como o pai é exibido junto com o título da página atual. Tente navegar para várias páginas e observar o controle SiteMapPath.
4. Use o controle de fonte de dados do SiteMap
O uso de mapas de sites não está limitado ao controle SiteMapPath. Você também pode anexar um mapa do site a um controle navegável (como um TreeView). No exemplo a seguir, você usará o mesmo arquivo de mapa do site para implementar a associação a um controle TreeView.
Adicione um novo formulário da Web SiteMapDataSourceDemo.aspx ao site. Em seguida, arraste um controle de fonte de dados SiteMap (SiteMapDataSource1) e um controle TreeView (TreeView1) para o formulário. Defina a propriedade DataSourceID deste controle TreeView como SiteMapDataSource1. Além disso, defina a propriedade ShowLines do controle TreeView como true. Aqui está a marcação completa da página SiteMapDataSourceDemo.aspx:
<%@ Idioma da página = "C#" AutoEventWireup = "true" CodeFile="SiteMapDataSourceDemo.aspx.cs" Herda =SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="servidor"> <title>Página sem título</title> </cabeça> <form id="form1" runat="servidor"> </formulário> </corpo> </html> |
Agora, execute o formulário da Web para ver como a mesma estrutura de navegação é gerada automaticamente no TreeView (veja a Figura 8).
Figura 8: Vinculando o arquivo de mapa do site a um controle TreeView |
Descrição | da propriedade |
ChildNodes | representa a coleção de todos os nós filhos do nó atual |
HasChildNodes | indica se o nó do mapa do site possui nós filhos (verdadeiro/falso) |
Title | retorna o valor do atributo title especificado no arquivo de mapa do site |
Url | retorna no arquivo de mapa do site O valor do atributo url especificado |
Description | retorna o valor do atributo description especificado no arquivo de mapa do site |
ParentNode | indica a referência do nó pai do mapa do site do nó atual |
protegido void Page_Load (remetente do objeto, EventArgs e) { contagem interna = SiteMap.RootNode.ChildNodes.Count; for (int i = 0; i < contagem; i++) { SiteMapNode smNode=SiteMap.RootNode.ChildNodes[i]; TreeNode tvNode = new TreeNode(smNode.Title, "", "", smNode.Url, ""); TreeView1.Nodes.Add(tvNode); se (smNode.HasChildNodes) { int childCount=smNode.ChildNodes.Count; for (int j = 0; j < childCount; j++) { SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = novo TreeNode(smChildNode.Title, "", "", smChildNode.Url, ""); tvNode.ChildNodes.Add(tvChildNode); } } } } |
Aqui, você primeiro obtém o número total de nós filhos no nó raiz. Em seguida, você percorre a coleção ChildNodes do nó raiz. Em cada iteração, você cria uma nova instância da classe TreeNode e especifica seu título e URL em seu construtor. Em seguida, você adiciona este TreeNode à coleção Nodes do TreeView. Em seguida, você verifica se o SiteMapNode atual possui algum nó filho. Se houver, você percorre-o e repete o processo de criação do TreeNode. Observe que desta vez você adiciona os novos TreeNodes à coleção ChildNodes do objeto TreeNode atual.
Observe que você usa 2 no loop porque sabe que existem apenas dois níveis de aninhamento. Para tornar sua lógica mais geral, você pode usar a recursão para preencher o TreeView.
Execute o formulário da web e você verá algo semelhante à Figura 8 novamente.
6. Use manutenção de segurança
Freqüentemente, os sites implementam um modelo de segurança baseado em funções. Por exemplo, você pode ter funções diferentes em seu aplicativo, como administrador de sistema, testador de produto e testador de serviço. Em situações como essa, muitas vezes você precisa controlar os links de navegação do site exibidos aos usuários. Por exemplo, se o usuário atualmente conectado tiver a função de testador de produto, talvez você queira exibir apenas links relacionados ao produto e ocultar quaisquer outros links. Uma maneira de lidar com funções é usar codificação manual; no entanto, requer a implementação de toda a lógica de autorização de forma programática. Felizmente, os arquivos do sitemap e o controle da fonte de dados do SiteMap juntos fornecem um recurso chamado corte de segurança para ajudá-lo.
Para testar a revisão da segurança, você precisa ativar os recursos de associação e função do seu site. Abra o arquivo web.config e adicione as seguintes tags:
<modo de autenticação="Formulários" /> <autorização> <negar usuários="?"></negar> </autorização> |
<roleManager habilitado="true" /> |
Figura 9: Adicionando funções usando ferramentas de gerenciamento de sites |
Figura 10: Criando usuários usando ferramentas de gerenciamento de sites |
<?xml versão="1.0" codificação="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Home" description="Meu site"> <siteMapNode title="Produtos" papéis="ProductTesters"> <siteMapNode url="~/products/product1.aspx" title="Primeiro Produto" /> <siteMapNode url="~/products/product2.aspx" title="Segundo Produto" /> </siteMapNode> <siteMapNode title="Serviços" role="ServiceTesters"> <siteMapNode url="~/services/service1.aspx" title="Primeiro serviço" /> <siteMapNode url="~/services/service2.aspx" title="Segundo serviço" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Fale Conosco" /> </siteMapNode> </siteMap> |
<provedores> <adicionar nome="meuprovedor" type="System.Web.XmlSiteMapProvider" siteMapFile="SecurityTrimming.sitemap" securityTrimmingEnabled="true" /> </provedores> |
Figura 11: Página de login |
Figura 12: Use reforma de segurança |