/// <summary>
 /// Gets SiteMap path for the current request
 /// </summary>
 /// <param name="helper">MvcSiteMapHtmlHelper instance</param>
 /// <param name="templateName">Name of the template.</param>
 /// <returns>SiteMap path for the current request</returns>
 public static MvcHtmlString SiteMapPath(this MvcSiteMapHtmlHelper helper, string templateName)
 {
     var model = BuildModel(helper, helper.Provider.CurrentNode);
     return helper
         .CreateHtmlHelperForModel(model)
         .DisplayFor(m => model, templateName);
 }
 /// <summary>
 /// Gets the CanonicalUrl of SiteMap.CurrentNode
 /// </summary>
 /// <param name="helper">MvcSiteMapHtmlHelper instance</param>
 /// <param name="templateName">Name of the template.</param>
 /// <param name="sourceMetadata">User-defined meta data.</param>
 /// <returns>The CanonicalUrl of the CurrentNode or the RootNode (if CurrentNode is null)</returns>
 public static MvcHtmlString CanonicalTag(this MvcSiteMapHtmlHelper helper, string templateName, SourceMetadataDictionary sourceMetadata)
 {
     var model = BuildModel(GetSourceMetadata(sourceMetadata), helper.SiteMap.CurrentNode ?? helper.SiteMap.RootNode);
     return helper
         .CreateHtmlHelperForModel(model)
         .DisplayFor(m => model, templateName);
 }
 /// <summary>
 /// Build a sitemap tree, based on the MvcSiteMap
 /// </summary>
 /// <param name="helper">The helper.</param>
 /// <param name="templateName">Name of the template.</param>
 /// <param name="startingNode">The starting node.</param>
 /// <param name="rootInChildLevel">Renders startingNode in child level if set to <c>true</c>.</param>
 /// <param name="sourceMetadata">User-defined meta data.</param>
 /// <returns>Html markup</returns>
 public static MvcHtmlString SiteMap(this MvcSiteMapHtmlHelper helper, string templateName, ISiteMapNode startingNode, bool rootInChildLevel, SourceMetadataDictionary sourceMetadata)
 {
     var model = BuildModel(helper, GetSourceMetadata(sourceMetadata), startingNode, rootInChildLevel);
     return helper
         .CreateHtmlHelperForModel(model)
         .DisplayFor(m => model, templateName);
 }
 /// <summary>
 /// Build a menu, based on the MvcSiteMap
 /// </summary>
 /// <param name="helper">The helper.</param>
 /// <param name="templateName">Name of the template.</param>
 /// <param name="startingNode">The starting node.</param>
 /// <param name="startingNodeInChildLevel">Show starting node in child level if set to <c>true</c>.</param>
 /// <param name="showStartingNode">Show starting node if set to <c>true</c>.</param>
 /// <param name="maxDepth">The max depth.</param>
 /// <param name="drillDownToCurrent">Should the model exceed the maxDepth to reach the current node</param>
 /// <param name="sourceMetadata">User-defined meta data.</param>
 /// <returns>Html markup</returns>
 public static MvcHtmlString Menu(this MvcSiteMapHtmlHelper helper, string templateName, ISiteMapNode startingNode, bool startingNodeInChildLevel, bool showStartingNode, int maxDepth, bool drillDownToCurrent, SourceMetadataDictionary sourceMetadata)
 {
     var model = BuildModel(helper, GetSourceMetadata(sourceMetadata), startingNode, startingNodeInChildLevel, showStartingNode, maxDepth, drillDownToCurrent);
     return helper
         .CreateHtmlHelperForModel(model)
         .DisplayFor(m => model, templateName);
 }
 /// <summary>
 /// Build a menu, based on the MvcSiteMap
 /// </summary>
 /// <param name="helper">The helper.</param>
 /// <param name="templateName">Name of the template.</param>
 /// <param name="startingNode">The starting node.</param>
 /// <param name="startingNodeInChildLevel">Show starting node in child level if set to <c>true</c>.</param>
 /// <param name="showStartingNode">Show starting node if set to <c>true</c>.</param>
 /// <param name="maxDepth">The max depth.</param>
 /// <param name="drillDownToCurrent">Should the model exceed the maxDepth to reach the current node</param>
 /// <returns>Html markup</returns>
 public static MvcHtmlString Pills(this MvcSiteMapHtmlHelper helper, string templateName, SiteMapNode startingNode, bool startingNodeInChildLevel, bool showStartingNode, int maxDepth, bool drillDownToCurrent)
 {
     var model = BuildModel(helper, startingNode, startingNodeInChildLevel, showStartingNode, maxDepth, drillDownToCurrent);
     return helper
         .CreateHtmlHelperForModel(model)
         .DisplayFor(m => model, "Sitemap/Pills");
 }
 /// <summary>
 /// Build a sitemap tree, based on the MvcSiteMap
 /// </summary>
 /// <param name="helper">The helper.</param>
 /// <param name="templateName">Name of the template.</param>
 /// <param name="startingNode">The starting node.</param>
 /// <param name="rootInChildLevel">Renders startingNode in child level if set to <c>true</c>.</param>
 /// <returns>Html markup</returns>
 public static MvcHtmlString SiteMap(this MvcSiteMapHtmlHelper helper, string templateName, SiteMapNode startingNode, bool rootInChildLevel)
 {
     var model = BuildModel(helper, startingNode, rootInChildLevel);
     return helper
         .CreateHtmlHelperForModel(model)
         .DisplayFor(m => model, templateName);
 }
 /// <summary>
 /// Gets the title of SiteMap.CurrentNode
 /// </summary>
 /// <param name="helper">MvcSiteMapHtmlHelper instance</param>
 /// <param name="templateName">Name of the template.</param>
 /// <returns>
 /// The title of the CurrentNode or the RootNode (if CurrentNode is null)
 /// </returns>
 public static MvcHtmlString SiteMapTitle(this MvcSiteMapHtmlHelper helper, string templateName)
 {
     var model = BuildModel(helper, helper.Provider.CurrentNode ?? helper.Provider.RootNode);
     return helper.CreateHtmlHelperForModel(model).DisplayFor(m => model, templateName);
     //return MvcHtmlString.Create(model.CurrentNode.Title);
 }