The SiteMapPath component displays a breadcrumb navigation path showing the current page's location within a site hierarchy. It helps users understand where they are in your application and provides quick navigation back to parent pages.
Original Microsoft implementation: https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.sitemappath?view=netframework-4.8
- PathSeparator - Custom separator string between nodes (default: " > ")
- PathSeparatorTemplate - Custom template for rendering separators
- PathDirection - RootToCurrent or CurrentToRoot ordering
- RenderCurrentNodeAsLink - Whether the current page is clickable
- ShowToolTips - Display node descriptions as tooltips
- ParentLevelsDisplayed - Limit breadcrumb depth (-1 for all)
- CurrentNodeTemplate - Custom template for current page node
- NodeTemplate - Custom template for ancestor nodes
- RootNodeTemplate - Custom template for the root/home node
- Style properties - CurrentNodeStyle, NodeStyle, RootNodeStyle, PathSeparatorStyle
Unlike Web Forms, which uses a Web.sitemap XML file with SiteMapDataSource, the Blazor implementation requires you to provide the site hierarchy programmatically via the SiteMapProvider property. This gives you more flexibility to build navigation hierarchies dynamically from databases, configuration, or other sources.
The SiteMapNode class provides a simple way to build hierarchies:
var root = new SiteMapNode("Home", "/");
var products = new SiteMapNode("Products", "/products", "Browse our products");
root.AddChild(products);- SiteMapDataSource - Not supported; provide a
SiteMapNodehierarchy directly - Web.sitemap XML file - Not supported; build the hierarchy in code
- Provider - The
SiteMapProviderproperty accepts aSiteMapNoderoot, not a provider name - SkipLinkText - Accessibility skip link not implemented
- ItemDataBound event - Not supported; use templates for customization
<asp:SiteMapPath
CurrentNodeStyle-BackColor="Yellow"
CurrentNodeTemplate="..."
ID="SiteMapPath1"
NodeStyle-ForeColor="Blue"
NodeTemplate="..."
ParentLevelsDisplayed="-1"
PathDirection="RootToCurrent"
PathSeparator=" > "
PathSeparatorStyle-Font-Bold="true"
PathSeparatorTemplate="..."
RenderCurrentNodeAsLink="false"
RootNodeStyle-Font-Bold="true"
RootNodeTemplate="..."
ShowToolTips="true"
SiteMapProvider="AspNetXmlSiteMapProvider"
SkipLinkText=""
runat="server" /><SiteMapPath
CurrentUrl="@CurrentPage"
ParentLevelsDisplayed="-1"
PathDirection="PathDirection.RootToCurrent"
PathSeparator=" > "
RenderCurrentNodeAsLink="false"
ShowToolTips="true"
SiteMapProvider="@SiteMap" />- Build your site map in code - Create a
SiteMapNodehierarchy that represents your site structure - Provide the current URL - Set
CurrentUrlto match against the site map nodes - URL matching is flexible - The component normalizes URLs, handling leading slashes and query strings
- Templates override default rendering - When you provide a template, you're responsible for all markup including links
@* Basic breadcrumb navigation *@
<SiteMapPath SiteMapProvider="@SiteMap" CurrentUrl="@CurrentUrl" />
@code {
private string CurrentUrl = "/products/electronics";
private SiteMapNode SiteMap = BuildSiteMap();
private static SiteMapNode BuildSiteMap()
{
var root = new SiteMapNode("Home", "/");
var products = new SiteMapNode("Products", "/products", "Browse our catalog");
var electronics = new SiteMapNode("Electronics", "/products/electronics");
root.AddChild(products);
products.AddChild(electronics);
return root;
}
}@* Using a custom separator *@
<SiteMapPath
SiteMapProvider="@SiteMap"
CurrentUrl="/products"
PathSeparator=" / " />
@* Using a template for the separator *@
<SiteMapPath SiteMapProvider="@SiteMap" CurrentUrl="/products">
<PathSeparatorTemplate>
<span class="mx-2">→</span>
</PathSeparatorTemplate>
</SiteMapPath>@* Make the current page clickable *@
<SiteMapPath
SiteMapProvider="@SiteMap"
CurrentUrl="/products"
RenderCurrentNodeAsLink="true" />@* Only show 2 parent levels *@
<SiteMapPath
SiteMapProvider="@SiteMap"
CurrentUrl="/products/electronics/phones/iphone"
ParentLevelsDisplayed="2" />
@* Renders: Electronics > Phones > iPhone (skips Home and Products) *@@* Full template customization *@
<SiteMapPath SiteMapProvider="@SiteMap" CurrentUrl="/products/electronics">
<RootNodeTemplate Context="node">
<a href="@node.Url" class="text-primary">🏠 @node.Title</a>
</RootNodeTemplate>
<NodeTemplate Context="node">
<a href="@node.Url" class="text-secondary">@node.Title</a>
</NodeTemplate>
<CurrentNodeTemplate Context="node">
<strong class="text-dark">📍 @node.Title</strong>
</CurrentNodeTemplate>
<PathSeparatorTemplate>
<span class="text-muted mx-1">/</span>
</PathSeparatorTemplate>
</SiteMapPath>@* Show current page first, then parents *@
<SiteMapPath
SiteMapProvider="@SiteMap"
CurrentUrl="/products/electronics"
PathDirection="PathDirection.CurrentToRoot" />
@* Renders: Electronics > Products > Home *@- Menu - Hierarchical navigation menu
- TreeView - Tree-style navigation
- Migration Guide