ABP理论学习之导航(Navigation)

返回总目录


本篇目录

每一个web应用在页面之间都有一些要导航的菜单。ABP提供了公用的基础设施来创建菜单并将菜单展示给用户。

创建菜单###

一个应用可能由不同的模块组成,每个模块可能有它自己的菜单项。想要定义菜单项,我们需要创建一个派生自NavigationProvider的类。

假设我们有一个如下所示的主菜单:

  • Tasks
  • Reports
  • Administration
    • User Management
    • Role Management

这里,Administration菜单项有两个子菜单项。创建这么一个菜单的导航提供者类如下所示:


   public class SimpleTaskSystemNavigationProvider : NavigationProvider
{
    public override void SetNavigation(INavigationProviderContext context)
    {
        context.Manager.MainMenu
            .AddItem(
                new MenuItemDefinition(
                    "Tasks",
                    new LocalizableString("Tasks", "SimpleTaskSystem"),
                    url: "/Tasks",
                    icon: "fa fa-tasks"
                    )
            ).AddItem(
                new MenuItemDefinition(
                    "Reports",
                    new LocalizableString("Reports", "SimpleTaskSystem"),
                    url: "/Reports",
                    icon: "fa fa-bar-chart"
                    )
            ).AddItem(
                new MenuItemDefinition(
                    "Administration",
                    new LocalizableString("Administration", "SimpleTaskSystem"),
                    icon: "fa fa-cogs"
                    ).AddItem(
                        new MenuItemDefinition(
                            "UserManagement",
                            new LocalizableString("UserManagement", "SimpleTaskSystem"),
                            url: "/Administration/Users",
                            icon: "fa fa-users",
                            requiredPermissionName: "SimpleTaskSystem.Permissions.UserManagement"
                            )
                    ).AddItem(
                        new MenuItemDefinition(
                            "RoleManagement",
                            new LocalizableString("RoleManagement", "SimpleTaskSystem"),
                            url: "/Administration/Roles",
                            icon: "fa fa-star",
                            requiredPermissionName: "SimpleTaskSystem.Permissions.RoleManagement"
                            )
                    )
            );
    }
}

一个MenuItemDefinition一般有一个唯一的name,一个本地化的displayName,一个 url和一个 icon。而且,

  • 一个菜单项可能要求一个特定的用户具有展示该菜单的权限。此时可以使用requiredPermissionName属性。
  • 一个菜单项可能依赖于一个功能。此时可以使用featureDependency
  • 一个菜单项可以定义一个customDataorder

**INavigationProviderContext **具有一个获得已存在菜单项、添加菜单以及菜单项的方法。这样,不同的模块就可以将自己的项添加到菜单上。

在一个应用中也可能有一个或更多的菜单,context.Manager.MainMenu引用了默认的主菜单。使用context.Manager.Menus可以创建和添加更多的菜单。

注册导航提供者

创建导航提供者之后,我们应该在模块的PreInitialize事件里将它注册到ABP的配置中:

Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>();

展示菜单###

可以注入IUserNavigationManager,然后使用它来获得菜单项,再将菜单项展示给用户。这样,我们就可以在服务端创建菜单了。

ABP在客户端自动生成获得菜单和菜单项的javascript APIabp.nav命名空间下的方法和对象就是用于这个目的。比如,可以使用 abp.nav.menus.Mainmenu获得应用的主菜单。这样我们就能在客户端创建菜单了。

ABP模板使用了这个系统来创建菜单并将菜单展示给用户,你可以通过创建一个模板来查看源代码了解更多。

posted @   tkbSimplest  阅读(5767)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示