Superdopey’s Techblog

Hide root node SiteMapPath

| 0 comments

ASP.NET ontwikkelaars zetten vaak de ShowStartingNode propertie van de SiteMapDataSource op false om deze te verbergen in het Menu en TreeView control.

Helaas werkt deze propertie niet voor het SiteMapPath control vanwege het feit dat de SiteMapPath geen gebruik maakt van de SiteMapDataSource op een pagina maar direct gebruik maakt van de Web.sitemap. Om nu toch de root node te verbergen moet de onderstaande code opgenomen worden in een de Global.asax:

Source: Jeff Prosise


void Application_Start(object sender, EventArgs e)
{
    //
    // Register a handler for SiteMap.SiteMapResolve events to hide the
    // root node from SiteMapPath controls.
    //
    SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(HideRootNode);
}

static SiteMapNode HideRootNode(Object sender, SiteMapResolveEventArgs e)
{
    //
    // Hide the root node from SiteMapPath controls by cloning the site
    // map from the current node up to the node below the root node and
    // setting that node's ParentNode property to null.
    //
   SiteMapNode current = null;

            if (SiteMap.CurrentNode != null)
            {
                SiteMapNode node = SiteMap.CurrentNode.Clone();
                current = node;
                SiteMapNode root = SiteMap.RootNode;

                if (!current.Equals(root)) // Just in case the current node *is* the root node!
                {
                    while (!node.ParentNode.Equals(root))
                    {
                        node.ParentNode = node.ParentNode.Clone();
                        node = node.ParentNode;
                    }
                    node.ParentNode = null;
                }
            }
            return current;
}

Leave a Reply

Required fields are marked *.

*