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 ...
随机推荐
- Dictionary简洁
mydic_ShuiFei = new Dictionary<string, string>() { {"00000336","南京市 ...
- Ubuntu下搭建tftp服务器最简单方法
今天开始调试ARM的板子,要通过tftp下载到板子上,所以又要配置tftp服务器,真的烦死了… (本人酷爱装系统,所以经常都要搞配置) 因为之前已经在Ubuntu下搭建过很多次tftp服务器了,但是一 ...
- 【asp.net core】Publish to a Linux-Ubuntu 14.04 Server Production Environment
Submary 又升级了,目录结构有变化了 . project.json and Visual Studio 2015 with .NET Core On March 7, 2017, the .NE ...
- 基于CentOS体验万象优图鉴黄服务
系统要求:CentOS 7.2 64 位操作系统 初始化配置 使用万象优图图片鉴黄 API 接口,我们需要先完成以下步骤: 获取腾讯云账号 APP ID 配置云 API 公钥/密钥 配置优图 buck ...
- 腾讯云SpringBoot部署 + HTTPS配置
springboot可以打包为jar和war,jar不多说了,最近的一个工程需要打包为war发布,大致说一下吧: 先看一下项目的大致结构: 第一步,需要排除springboot自带的tomcat插件 ...
- 开发FTP不要使用sun.net.ftp.ftpClient
转自:http://cai21cn.iteye.com/blog/700188 在开发一个web应用过程中,需要开发一个服务使用ftp功能将数据传输一个网外的ftp服务器.最初使用sun.net.ft ...
- android studio: 一个Android studio 3.3.2 无法创建新项目的问题
记录一个AS无法创建新项目的问题. 今天想写一个测试Demo,点击上面的“Start a new Android Studio Project” ,填写完包名和项目路径后,点“Finish”, AS无 ...
- Understanding How Graal Works - a Java JIT Compiler Written in Java
https://chrisseaton.com/truffleruby/jokerconf17/ https://chrisseaton.com/truffleruby/tenthings/ http ...
- 【Linux高级驱动】input子系统框架
[1.input子系统框架(drivers\input)] 如何得出某个驱动所遵循的框架? 1) 通过网络搜索 2) 自己想办法跟内核代码! 2.1 定位此驱动是属于哪种类 ...
- Pitch detection algorithm(基音搜索算法)PDA相关链接
第一:维基百科 http://en.wikipedia.org/wiki/Pitch_estimation 简要系统介绍了基音估计算法的分类和一些链接,论文 第二:http://ws2.bingham ...