@using Microsoft.AspNetCore.Components.Routing @inject NavigationManager NavigationManager @foreach (var crumb in breadcrumbs) { @crumb.Text } @code { private List breadcrumbs = new List(); protected override void OnInitialized() { GenerateBreadcrumbs(); NavigationManager.LocationChanged += OnLocationChanged; } private void OnLocationChanged(object sender, LocationChangedEventArgs e) { GenerateBreadcrumbs(); StateHasChanged(); } private void GenerateBreadcrumbs() { breadcrumbs.Clear(); breadcrumbs.Add(new BreadcrumbItem { Text = "", Url = "/" }); var uri = NavigationManager.ToBaseRelativePath(NavigationManager.Uri); var segments = uri.Trim('/').Split('/'); var breadcrumbNames = new List(); FindBreadcrumbNames(Global.Menus, segments, 0, ref breadcrumbNames); if (breadcrumbNames?.Count > 0) { foreach (var item in breadcrumbNames) { breadcrumbs.Add(new BreadcrumbItem { Text = item }); } } } private bool FindBreadcrumbNames(List menus, string[] segments, int index, ref List breadcrumbNames) { if (index >= segments.Length) { return false; } foreach (var menu in menus) { var menusplit = menu.Path.Trim('/').Split('/'); //var menuPath = menu.Path.Trim('/'); if (menusplit[index] == segments[index]) { breadcrumbNames.Add(menu.Name); if (index == segments.Length - 1 || (menu.Children != null && FindBreadcrumbNames(menu.Children, segments, index + 1, ref breadcrumbNames))) { return true; } } } return false; } public class BreadcrumbItem { public string Text { get; set; } public string Url { get; set; } } public void Dispose() { NavigationManager.LocationChanged -= OnLocationChanged; } }