ASP.NET ABP 之导航菜单

每一个网站都会有导航菜单(通常不止一个),ASP.NET Boilerplate(后文简称ABP)提供了一种创建和使用菜单的通用架构,利用架构我们可以方便的创建菜单并显示给用户。本文主要说明菜单的创建,以及结合AngularJS上菜单的显示,如何从数据库动态取得菜单数据不再本文范围。

创建菜单

一个应用程序可能有多个不同的模块,每个模块有它对应的菜单项。为了定义这些菜单项,我们需要创建一个继承自 NavigationProvider 的子类。
      假设我们有一个如下所示的主菜单:

   工作台
   任务
   留言板
   系统管理
      用户管理
      角色管理

这里面系统管理菜单有两个子菜单项。建立一个这样菜单的类ZeroNavigationProvider,如下:

 1 public class ZeroNavigationProvider : NavigationProvider
 2 {
 3       public override void SetNavigation(INavigationProviderContext context)
 4       {
 5             context.Manager.MainMenu
 6                   .AddItem(
 7                         new MenuItemDefinition(
 8                               "Dashboard",
 9                               new LocalizableString("HomePage", "Zero"),
10                               url: "#/",
11                               icon: "icon-home"
12                         )
13                   ).AddItem(
14                         new MenuItemDefinition(
15                               "Task",
16                               new LocalizableString("Task", "Zero"),
17                               url: "#/tasklist",
18                               icon: "icon-tag"
19                         )
20                   ).AddItem(
21                         new MenuItemDefinition(
22                               "QA",
23                               new LocalizableString("QA", "Zero"),
24                               url: "#/qa",
25                               icon: "icon-question"
26                         )
27                   ).AddItem(
28                         new MenuItemDefinition(
29                               "SystemAdmin",
30                               new LocalizableString("SystemAdmin", "Zero"),
31                               icon: "icon-wrench"
32                         ).AddItem(
33                               new MenuItemDefinition(
34                                     "UserManage",
35                                     new LocalizableString("UserManage", "Zero"),
36                                     url: "/systemadmin/users",
37                                     icon: "icon-users"
38                               )
39                         ).AddItem(
40                               new MenuItemDefinition(
41                                     "RoleManage",
42                                     new LocalizableString("RoleManage", "Zero"),
43                                     url: "/systemadmin/role",
44                                     icon: "icon-briefcase"
45                               )
46                         );
47                }
48  }

一个MenuItemDefinition对象可能拥有一个唯一的命名,一个本地化显示的名称,一个URL地址以及一个图标。一个菜单项也可能需要拥有特定权限的用户才可以浏览。

1 new MenuItemDefinition(
2     "RoleManage",
3     new LocalizableString("RoleManage", "Zero"),
4     url: "/systemadmin/role",
5     icon: "icon-briefcase",
6     requiredPermissionName: "systemadmin",
7     requiresAuthentication:true
8 )

本地化显示的名称来自于资源文件,LocalizableString第二个参数就是系统中资源文件的名称。这时候需要确保资源文件存在,比如:Zero-zh-CN.xml,而且根据第一个代码参数必须能够正常取出对应的文本内容,否则菜单可能无法显示。
INavigationProviderContext 提供了一些方法接口,用于得到已经存在的菜单项,添加菜单以及子菜单。因此不同的模块能够添加自己的菜单项。
      一个应用程序可能有多个菜单,context.Manager.MainMenu 只是对应默认的主菜单。我们可以利用 context.Manager.Menus 属性自己创建并添加更多的菜单。
      创建了 NavigationProvider 之后,我们需要将它注册到ABP的配置项中,这个动作应该放在我们模块的 PreInitialize 事件中。比如我们网站的Web层有一个 ZeroWebModule,在其中添加代码:

1 public override void PreInitialize()
2 {
3     // other configuration code, like localization
4     // Configure navigation/menu
5     Configuration.Navigation.Providers.Add<ZeroNavigationProvider>();
6 }

显示菜单

我们能够在服务器端创建菜单。Abp.Application.Navigation 命名空间下的 IUserNavigationManager 接口通过依赖注入,实现菜单项的取得和显示。服务器端创建菜单通常用于ASP.NET MVC 的多页面网站,这里略过不表。

我们也可以在客户端创建菜单。ABP自动产生Javascript API ,使得我们在客户端可以轻松取得菜单和菜单项。做到这一点,我们只需要在网页引入下面的一行代码(动态生成的Javascript):

<script src="~/AbpScripts/GetScripts" type="text/javascript"></script>

在调试状态下,我们可以查看动态生成的Javascript代码,其中有一段关于导航菜单的定义:

 1 (function() {
 2     abp.nav = {};
 3     abp.nav.menus = {
 4         ‘MainMenu‘: {
 5             name: ‘MainMenu‘,
 6             displayName: ‘Main menu‘,
 7             items: [{
 8                 name: ‘Dashboard‘,
 9                 icon: ‘icon-home‘,
10                 url: ‘#/‘,
11                 displayName: ‘工作台‘,
12                 items: []
13             } , {
14                 name: ‘Task‘,
15                 icon: ‘icon-tag‘,
16                 url: ‘#/task‘,
17                 displayName: ‘任务‘,
18                 items: []
19             } , {
20                 name: ‘QA‘,
21                 icon: ‘icon-question‘,
22                 url: ‘#/qa‘,
23                 displayName: ‘留言板‘,
24                 items: []
25             } , {
26                 name: ‘SystemAdmin‘,
27                 icon: ‘icon-wrench‘,
28                 displayName: ‘系统管理‘,
29                 items: [{
30                     name: ‘UserManage‘,
31                     icon: ‘icon-users‘,
32                     url: ‘/systemadmin/users‘,
33                     displayName: ‘用户管理‘,
34                     items: []
35                 } , {
36                     name: ‘RoleManage‘,
37                     icon: ‘icon-briefcase‘,
38                     url: ‘/systemadmin/rolelist‘,
39                     displayName: ‘角色管理‘,
40                     items: []
41                 }]
42             };
43         }
44 })();

在Javascript 里面我们就可以使用 abp.nav 命名空间下的方法和属性,比如:abp.nav.menus.MainMenu 用于取得应用程序的主菜单。

时间: 2024-10-27 06:06:07

ASP.NET ABP 之导航菜单的相关文章

纯CSS实现的二级下拉导航菜单实例代码

纯CSS实现的二级下拉导航菜单实例代码:二级下拉菜单在众多的网站都有应用,不但能够有效的组织分类导航,并且能够节省大量的网站空间,也能够实现网站的动态化效果,大多数二级导航菜单都是结合javascript实现,本章节介绍一下使用纯css实现的下拉菜单.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" co

竖向二级导航菜单特效的实现

竖向二级导航菜单特效的实现:在网页设计中,导航菜单的应用非常频繁,横向二级导航菜单的应用可能会多一些,垂直导航菜单可能稍稍少一些,当然这是相对而言的,竖向二级导航菜单的使用也是非常的频繁的,下面就简单介绍一下如何实现此功能,咱们这里只是介绍如何实现,关于美化方面不是重点,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="a

纯CSS实现二级下拉导航菜单

这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xm

jquery倾斜的动画导航菜单

1. [代码]完整源代码  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv=&qu

BootStrap学习(3)_导航菜单

一.导航元素 1.表格导航或标签 以一个带有 class .nav 的无序列表开始. 添加 class .nav-tabs. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> &

SharePoint开发 - 自定义导航菜单(一)菜单声明与配置

本篇描述自定义sharepoint菜单的一种方式,自定义菜单适用于一些门户等需求的网站 自定义的菜单有自己的数据源,可以是数据表,可以是XML,本篇叙述的是采用XML数据源作为菜单的声明定义部分,将XML以文件的格式保存到网站中自己创建的配置文档库中 XML菜单的格式形如下面的格式,其中有菜单标题title属性,有菜单所属的权限用户组SPGroups属性,有菜单的链接url属性,实际应用中可以添加更多的字段. <SiteMap> <SiteMapNode title="我的项目

C# WPF侧边栏导航菜单(Dropdown Menu)

时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.WPF.ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt Widgets等,只分享自己熟悉的.自己会的. 阅读导航: 一.先看效果 二.本文背景 三.代码实现 四.文章参考 五.代码下载 一.先看效果 二.本文背景 YouTube  Design com WPF 大神处习得,菜单

纯css实现的三级水平导航菜单

vscode练习使用开发纯css的三级水平导航菜单.先上图: 1.html5布局 1 <html> 2 3 <head> 4 <meta charset="UTF-8"> 5 <title>水平导航菜单</title> 6 <link rel="stylesheet" href="reset.css"> 7 <link rel="stylesheet"

Angular+Bootstrap3导航菜单

Angular+Bootstrap3导航菜单 AngularJS体验式编程系列文章,将介绍如何用angularjs构建一个强大的web前端系统.angularjs是由Google团队开发的一款非常优秀web前端框架.在当前如此多的web框架下,angularjs能脱颖而出,从架构设计上就高人一等,双向数据绑定,依赖注入,指令,MVC,模板.Angular.js创新地把后台技术融入前端开发,扫去jQuery一度的光芒.用angularjs就像写后台代码,更规范,更结构化,更可控. 关于作者 张丹(