You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor页面使用MudBlazor构建基于用户权限的递归动态菜单问题

Blazor + MudBlazor 无限层级递归菜单实现方案

你可以通过Blazor的递归RenderFragment实现无限层级菜单渲染,不需要拆分独立组件,修改后的完整代码如下:

页面渲染部分

@if (menuItems == null)
{
    <div class="spinner"></div>
}
else
{
    @* 从根菜单(ParentID=0)开始渲染 *@
    @RenderMenuItems(0)
}

代码逻辑部分

@code {
    // 你的菜单数据源
    private List<MenuItem> menuItems = new();

    // 你原有获取子菜单的方法
    private List<MenuItem> GetChildItems(int ParentID)
    {
        var foundItems = from m in menuItems
                         where m.ParentID == ParentID
                         select m;
        return foundItems.ToList();
    }

    // 核心:递归渲染片段,入参为当前父菜单ID
    private RenderFragment<int> RenderMenuItems = parentId => __builder =>
    {
        var currentLevelItems = GetChildItems(parentId);
        foreach (var item in currentLevelItems)
        {
            var childItems = GetChildItems(item.MenuItemID);
            if (childItems.Any())
            {
                // 有子菜单,渲染MudNavGroup,嵌套调用递归方法渲染子项
                <MudNavGroup Title="@item.ItemName" Icon="@item.Icon" HideExpandIcon="true">
                    @RenderMenuItems(item.MenuItemID)
                </MudNavGroup>
            }
            else
            {
                // 无子菜单,渲染导航链接,记得替换为你MenuItem实体对应的字段
                <MudNavLink Href="@item.Url" Match="NavLinkMatch.All" Icon="@item.Icon">
                    @item.ItemName
                </MudNavLink>
            }
        }
    };

    // 你的MenuItem实体示例,可根据实际表结构扩展
    public class MenuItem
    {
        public int MenuItemID { get; set; }
        public string ItemName { get; set; }
        public int ParentID { get; set; }
        public string Url { get; set; }
        public string Icon { get; set; }
    }
}

注意事项

  • 请根据你的实际数据表结构扩展MenuItem实体的字段,不要使用示例中写死的跳转地址、图标值
  • 如果需要加权限控制,直接在GetChildItems方法中增加权限过滤逻辑,仅返回当前用户有权限访问的菜单即可
  • MudBlazor原生支持嵌套的MudNavGroup,层级缩进样式会自动适配,无需额外自定义样式

内容的提问来源于stack exchange,提问作者Stephen Pefanis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:48:03