Rui Quintino

.Net & afins

My Links

News



Reading...

Favorites

Archives

Post Categories

Image Galleries

Login

Blog Stats

SiteMapProvider e QueryStrings

Apenas uma nota pequena de que me lembrei depois do ligeiro face lift que fiz às demos. O cenário era o seguinte (asp.net 2.0):

Uma página com uma qualquer listagem, com links para outra página onde era exibido o detalhe de cada registo (sendo um determinado id passado por querystring). Nestes casos não podemos colocar no sitemap todos os nodos possíveis, dado que eles são completamente dinâmicos.... mas ainda assim queremos exibir o breadcrumb/sitemappath da forma apropriada,exemplo: home>lista de pedidos>detalhe de pedido.

Usei um custom sitemapprovider do Bobby DeRosa que tem servido perfeitamente para estes cenários. Quanto à questão de os items acabarem por aparecer em treeviews e menus dei a volta com:

 protected void Menu1_MenuItemDataBound(object sender, MenuEventArgs e)
    {
        SiteMapNode node = (SiteMapNode)e.Item.DataItem;
        string visible = node["visible"];
        if (visible != null && !bool.Parse(visible))
        {
            if (e.Item.Parent != null)
                e.Item.Parent.ChildItems.Remove(e.Item);
            else
                Menu1.Items.Remove(e.Item);
        }
    }

ou para o caso da treeview:

 protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
        {
            SiteMapNode node = (SiteMapNode) e.Node.DataItem;
            string visible= node["visible"];
            if ( visible!= null && !bool.Parse(visible))
            {
                if (e.Node.Parent != null)
                    e.Node.Parent.ChildNodes.Remove(e.Node);
                else
                    TreeView1.Nodes.Remove(e.Node);
            }
        }

(e claro adicionado um atributo visible="false" ao sitemap)

Exemplo:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="~/default.aspx" title="Home"  description="">
        <siteMapNode url="~/demos/Catalog.aspx" title="Catálogo de Produtos"  description="" visible="false" />
        <siteMapNode url="~/Restricted/listacontas.aspx" title="Lista de Contas"  description="" visible="false" />
      <siteMapNode url="~/Restricted/pedidoscredito.aspx" title="Pedidos de Crédito"  description="">
        <siteMapNode title="Detalhe de Pedido" url="~/Restricted/detalhepedidocredito.aspx" reliantOn="id" visible="false"/>
      </siteMapNode>
      <siteMapNode url="~/demos/SQLLogin.aspx" title="SQL Login"  description="" />
      <siteMapNode url="~/demos/Forum.aspx?idforum=2" title="Fórum"  description="" />
      <siteMapNode url="~/demos/Forum.aspx" title="Fórum II"  description="" visible="false"/>
      <siteMapNode url="~/demos/showcookie.aspx" title="Cookie"  description="" />
      <siteMapNode url="~/demos/HackedWebService.asmx" title="Web Service"  description="" visible="false"/>
      <siteMapNode url="~/Restricted/upload.aspx" title="Documentos"  description="" />
      <siteMapNode url="~/login.aspx" title="Login"  description="" reliantOn="ReturnUrl" visible="false"/>
    </siteMapNode>
</siteMap>

Sem garantias :) Não tive problemas no meu cenário, não quer dizer que não os venha a encontrar.

RQ

posted on Monday, March 13, 2006 11:15 PM

Feedback

No comments posted yet
Title  
Name  
Url
Box Code
Protected by FormShield
Comments