ABP之展现层(导航菜单)
基本的增删改查已经粗糙的结束了,接下来就是要方便的展示了,也就是导航菜单。在Abp中已经对导航栏的设置进行了相应的封装(Abp.Application.Navigation),可以方便我们快速的将自己开发的页面添加到首页的导航栏中。
一.添加自己的导航菜单
当我们从ABP官网下载模板的时候,项目会自动的为我们在MVC项目中的StartUp文件夹中创建一个...NavigationProvider的文件,同时会添加基本的菜单:主页、用户、租户、关于。

不但已经默认给我们创建了一个provider,而且已经给我们初始化了

看懂了模板中的菜单的定义方式和注意事项,接下就可以自定义我们的菜单

刷新一下页面,我们自定义的页面就这么轻易的创建了

二.导航菜单的具体创建流程
1. 几个重要的类
NavigationManager:菜单的和心类,这个类定义了MenuDefinition(主菜单)、NavigationConfiguration(导航菜单配置),同时调用NavigationProvider中的SetNavigation,完成菜单的初始化。


MenuDefinition:主菜单类,定义了一个List<MenuItemDefinition>,这个类存放了我们定义的菜单,同时定义了AddItem方法

从上面的源码中可以看出我们最开始自定义的导航菜单的方法就是在这里定义的。
MenuItemDefinition:子菜单,这就是我们具体的展示在页面上的菜单。它也定了一个List<MenuItemDefinition>和AddItem方法

从这边的代码中可以看出,因为子菜单中定义了List<MenuItemDefinition>,所以我们的菜单支持菜单的不断的嵌套。
NavigationConfiguration:用来存放菜单的,我们上面的MenuItemDefinition定义的全部是每个菜单项的具体信息,那么整个菜单(provider)存放在哪呢,没错,就是这。比如最上面的我们自定义的导航类StudyABPProjectNavigationProvider : NavigationProvider

NavigationProvider:这个就是用来存放菜单的自定义类需要继承的抽象类

现在总结一下:其实通过上面的几个类就可以看出我们定义的菜单的实现流程了。
首先我们创建自定义XXXProvider类继承自NavigationProvider,并在Provider中定义好MenuItemDefinition。然后将provider添加到NavigationConfiguration中。最后通过NavigationManager调用Initialize方法,在这个方法里调用每个provider的SetNavigation方法,完成菜单的定义。
等一下,现在有一个问题,在最开始我们依葫芦画瓢定义自己的菜单的时候,需要为菜单定义权限,就是说拥有权限的用户登陆才可以看到相应的菜单栏,我们的ABP系统是一个完善的具有权限管理的系统,我们上面的分析,通过NavigationManager初始化菜单,并没有与权限有什么卵的关系。那么我们每个人登陆时获取的菜单都是一样的,这不就出问题了嘛。。。。。。。。。。。。。所以还有一个重要的类需要看一下,那就是UserNavigationManager

这就比较清楚了,哈哈哈
最后一个问题,如果我们想要获取到我们定义的菜单,应该怎么做?
(1)通过NavigaitonManager(ISingleDependency单例模式)获取所有菜单,所以我们可以直接通过注入的方式获取到
(2)通过UserNavigatinManager(ITranseientDependency临时注入模式)获取指定用户的菜单,可以通过依赖注入,也可以直接new出来

ABP之展现层(导航菜单)的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之22.ABP展现层——导航栏设置 ABP是“ASP.NET Boilerplate Project (ASP.NE ...
- ABP之展现层(Datatables分页)
在前面的随笔中,已经介绍了ABP的增删改查的操作,但是对于查询的数据并没有进行分页,只是进行粗糙的展示,今天的随笔中将摸索进行分页展示.这里打算使用的分页插件是DataTables,这是一款比较强大的 ...
- abp的权限与导航菜单的关系
原来以为各是各的,所以就有了第一个版本.Getallmentus.然后注入了role,当然失败了.获取所有的菜单.一直在思考在什么地方设置菜单是否展示呢? 后面看了源码.才发现自己错了. UserNa ...
- ABP入门系列(6)——定义导航菜单
ABP入门系列目录--学习Abp框架之实操演练 完成了增删改查以及页面展示,这一节我们来为任务清单添加[导航菜单]. 在以往的项目中,大家可能会手动在layout页面中添加一个a标签来新增导航菜单,这 ...
- DDD开发框架ABP之导航菜单
每一个网站都会有导航菜单(通常不止一个),ASP.NET Boilerplate(后文简称ABP)提供了一种创建和使用菜单的通用架构,利用架构我们可以方便的创建菜单并显示给用户.本文主要说明菜单的创建 ...
- ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...
- ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- ABP入门系列(6)——展现层实现增删改查
这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...
随机推荐
- SpringCloud实战2-Ribbon客户端负载均衡
https://www.cnblogs.com/huangjuncong/p/9022055.html
- 【转发】Cookie存储的值大小限制和个数问题
Cookie以及LocalStorage.SessionStorage的区别 缓存机制对于用户访问网页来说是很方便的.如果将用户名,偏好设定或者其他一些数据存储到客户端,而不必每次访问网页都输入数据, ...
- Python之道(一)之安装Python
"Python之道"首先介绍一下在windows系统下怎样安装Python开发环境. (1)下载MSI安装文件 进入网址www.python.org,点击Downloads进入下载 ...
- Adobe Photoshop CC2019中文破解版
今天突发兴致玩PS, 之前安装的是CS6, 下载安装色相环插件后 先采用拷贝文件夹的方式将Coolorus放到plug-in下, 重启发现窗口>扩展程序 这项是灰色的. 于是采用安装coolor ...
- 分区工具parted的详解及常用分区使用方法【转】
来源:http://blog.51cto.com/zhangmingqian/1068779 分区工具parted的详解及常用分区使用方法 一. parted的用途及说明 概括使用说明 ...
- 判断js数组包是否包含某个元素
要判断数组中是否包含某个元素,从原理来来说,就是遍历整个数组,然后判断是否相等,我们来造个轮子,名字就山寨PHP的数组函数in_array() Array.prototype.in_array = f ...
- Effective Java 第三版——46. 优先考虑流中无副作用的函数
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- [k8s]kube-dns架构图解
kubedns DNS Policy http://blog.fleeto.us/translation/configuring-private-dns-zones-and-upstream-name ...
- linux每日命令(23):find命令之xargs
在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...
- Goldengate:ERROR 180 encountered commit SCN that is not greater than the highest SCN already processed
How to recover from Extract ERROR 180 encountered commit SCN that is not greater than the highest SC ...