This question is locked. New answers and comments are not allowed.
                        
                        
                                            Derek Hunziker
                                            
                                    
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                        
                                        Derek Hunziker
                                        asked on 09 Jul 2010, 04:41 PM
                                    
                                Hello,
How does one get the current node from the Telerik MVC sitemap? I only see a reference to the RootNode and all of it's children. I'm trying to build a breadcrumbs navigation menu but I can't get a handle on how to extract the current node.
Do I need to iterate through every node and check the combination of view/controller/action/area against the current request?
Thanks!
-Derek
                                How does one get the current node from the Telerik MVC sitemap? I only see a reference to the RootNode and all of it's children. I'm trying to build a breadcrumbs navigation menu but I can't get a handle on how to extract the current node.
Do I need to iterate through every node and check the combination of view/controller/action/area against the current request?
Thanks!
-Derek
5 Answers, 1 is accepted
0
                                
                                                    Derek Hunziker
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 13 Jul 2010, 04:58 AM
                                            
                                        Sorry to bump this but does anyone know how to get the CurrentNode (i.e. current view page) from the sitemap?
There is another really great MVC sitemap project on codeplex that offers the breadcrumb helpers that I'm shooting for, but it's not compatable with Telerik's MVC extensions (as far as I can tell). I'm trying to create my own breadcrumbs helpers, but in order to do this, I need to get the current node.
Thanks!
                                        There is another really great MVC sitemap project on codeplex that offers the breadcrumb helpers that I'm shooting for, but it's not compatable with Telerik's MVC extensions (as far as I can tell). I'm trying to create my own breadcrumbs helpers, but in order to do this, I need to get the current node.
Thanks!
0
                                Accepted
Hello Derek Hunziker,
Currently the SiteMap does not support this feature. I have logged it as a feature request and you can cast your vote for it.
Regards,
Atanas Korchev
the Telerik team
                                        Currently the SiteMap does not support this feature. I have logged it as a feature request and you can cast your vote for it.
Regards,
Atanas Korchev
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the 
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0
                                
                                                    Shane Milton
                                                    
                                            
    Top achievements
    
            
                 Rank 2
                Rank 2
            
    
                                                
                                                answered on 28 Jul 2010, 09:09 PM
                                            
                                        Derek,
Does the .HighlightPath(true) feature not help you?
-Shane
                                        Does the .HighlightPath(true) feature not help you?
-Shane
0
                                
                                                    Derek Hunziker
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 28 Jul 2010, 10:55 PM
                                            
                                        Well, not exactly, but thanks very much for letting me know about that feature :).
What I'm after is a secondary navigation that starts at the current node. This is a pretty common requirement and very easy to build (It's even possible with the codeplex mvc sitemap project), but it requires that you know the current node.
The code below is as close as I could get (it's is my BaseController class that I inherit all of my controllers from)
 
 
 
 
                                        What I'm after is a secondary navigation that starts at the current node. This is a pretty common requirement and very easy to build (It's even possible with the codeplex mvc sitemap project), but it requires that you know the current node.
The code below is as close as I could get (it's is my BaseController class that I inherit all of my controllers from)
[PopulateSiteMap(SiteMapName = "siteMap", ViewDataKey = "siteMap")]public abstract class BaseController : Controller{    public BaseController()    {        // Add global contoller logic here    }    protected override void OnActionExecuted(ActionExecutedContext filterContext)    {        SiteMapBase siteMap = SiteMapManager.SiteMaps["siteMap"];        ViewData["currentNode"] = GetCurrentNode(siteMap.RootNode); // Store in ViewData        base.OnActionExecuted(filterContext);    }    private SiteMapNode GetCurrentNode(SiteMapNode node)    {        // Compare the node's url to the current url        if (this.Url.Action(node.ActionName, node.ControllerName, node.RouteValues) ==            this.Request.Path)            return node; // Match!        // Recurse through childnodes        foreach (SiteMapNode child in node.ChildNodes)        {            SiteMapNode match = GetCurrentNode(child);            if (match != null)                return match;        }        // Not found!        return null;    }}0
                                
                                                    Derek Hunziker
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 11 Aug 2010, 11:20 PM
                                            
                                        I ran into an issue today with my custom navigation and I thought I would share my solution. 
For some reason when calling myNode.ChildNodes, all of the child nodes get returned including hidden nodes [nodes with "Visible" set to false] and nodes that are supposed to be invisible to the anonymous users [nodes with an Authorized attribute]. Since I only want to show navigation items that my users can actually navigate to, I needed to somehow check if each node was visible and accessible before adding it to the navigation.
Luckily, a Telerik MVC SiteMapNode inherits from INavigatable which allows you to do this:
 
                                        For some reason when calling myNode.ChildNodes, all of the child nodes get returned including hidden nodes [nodes with "Visible" set to false] and nodes that are supposed to be invisible to the anonymous users [nodes with an Authorized attribute]. Since I only want to show navigation items that my users can actually navigate to, I needed to somehow check if each node was visible and accessible before adding it to the navigation.
Luckily, a Telerik MVC SiteMapNode inherits from INavigatable which allows you to do this:
var navAuthorization = Telerik.Web.Mvc.Infrastructure.ServiceLocator.Current.Resolve<Telerik.Web.Mvc.Infrastructure.INavigationItemAuthorization>();if (node.Visible && navAuthorization.IsAccessibleToUser(helper.ViewContext.RequestContext, node){    // Okay to show in navigation...}