abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)
abp(net core)+easyui+efcore实现仓储管理系统目录
abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)
abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二)
abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)
abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四)
abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之菜单与测试(九)
abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一)
abp(net core)+easyui+efcore实现仓储管理系统——菜单-上 (十六)
三、动态加载菜单
通过 abp(net core)+easyui+efcore实现仓储管理系统——菜单-上 (十六)这篇文章,我们已经了解了ABP中的菜单相关的类及类的属性与方法,接下我们通过实例来实现一个动态加载菜单的功能。动态菜单是我们在abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)至abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八)中添加的功能模块。
1. 在Visual Studio 2017的“解决方案资源管理器”中,右键单击“ABP.TPLMS.Mvc.Web”项目的“Startup”文件夹,在弹出菜单中选择“添加” > > “类”。 将类命名为 DaynaicAddMenu,然后选择“添加”。如下图。
2. 在Visual Studio 2017的编辑器中打开我们刚才创建的DaynaicAddMenu.cs文件,写入如下代码。
- using Abp.Application.Navigation;
- using Abp.Localization;
- using ABP.TPLMS.Entitys;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- namespace ABP.TPLMS.Web.Startup
- {
- public class DynamicAddMenu
- {
- Modules.IModuleAppService _moduleAppService;
- public DynamicAddMenu(Modules.IModuleAppService moduleApp)
- { _moduleAppService = moduleApp; }
- public MenuItemDefinition AddMenus()
- {
- #region 动态菜单
- var modules= _moduleAppService.GetAll();
- var project = new MenuItemDefinition(
- "Business",
- L("Business"),
- icon: "menu",
- order:
- );
- var list = modules.ToList();
- FillMenu(project, , list);
- return project;
- #endregion
- }
- // 递归算法
- private void FillMenu(MenuItemDefinition menu, int ParentId, List<Module> modules)
- {
- List<Module> drs = modules.Where(x=>x.ParentId==ParentId).ToList();
- if (drs == null || drs.Count <=)
- {
- return;
- }
- else
- {
- for (int i = ; i < drs.Count; i++)
- {
- Module dr = drs[i];
- MenuItemDefinition nodeName = new MenuItemDefinition(
- dr.Name,
- L(dr.DisplayName),
- url: dr.Url,
- icon: "business",
- requiredPermissionName: dr.RequiredPermissionName,
- customData: i
- );
- menu.AddItem(nodeName);
- FillMenu(nodeName, dr.Id, modules);
- }
- }
- }
- private static ILocalizableString L(string name)
- {
- return new LocalizableString(name, TPLMSConsts.LocalizationSourceName);
- }
- }
- }
3. 在Visual Studio 2017的编辑器中打开“ABP.TPLMS.Mvc.Web”项目的“Startup”文件夹中的TPLMSNavigationProvider.cs文件,写入加载菜单的代码。下面代码中的粗体部分。
- using Abp.Application.Navigation;
- using Abp.Localization;
- using ABP.TPLMS.Authorization;
- namespace ABP.TPLMS.Web.Startup
- {
- /// <summary>
- /// This class defines menus for the application.
- /// </summary>
- public class TPLMSNavigationProvider : NavigationProvider
- {
- Modules.IModuleAppService _moduleAppService;
- public TPLMSNavigationProvider(Modules.IModuleAppService moduleApp)
- { _moduleAppService = moduleApp; }
- public override void SetNavigation(INavigationProviderContext context)
- {
- var subMenu = new DynamicAddMenu(_moduleAppService).AddMenus();
- context.Manager.MainMenu
- .AddItem(
- new MenuItemDefinition(
- PageNames.Home,
- L("HomePage"),
- url: "",
- icon: "home",
- requiresAuthentication: true
- )
- ).AddItem(
- new MenuItemDefinition(
- PageNames.Tenants,
- L("Tenants"),
- url: "Tenants",
- icon: "business",
- requiredPermissionName: PermissionNames.Pages_Tenants
- )
- ).AddItem(
- new MenuItemDefinition(
- PageNames.Users,
- L("Users"),
- url: "Users",
- icon: "people",
- requiredPermissionName: PermissionNames.Pages_Users
- )
- ).AddItem(
- new MenuItemDefinition(
- PageNames.Roles,
- L("Roles"),
- url: "Roles",
- icon: "local_offer",
- requiredPermissionName: PermissionNames.Pages_Roles
- )
- )
- .AddItem(
- new MenuItemDefinition(
- PageNames.Module,
- L("Module"),
- url: "Module",
- icon: "local_offer"
- )
- )
- .AddItem(
- new MenuItemDefinition(
- PageNames.Supplier,
- L("Supplier"),
- url: "Supplier",
- icon: "people"
- )
- )
- .AddItem(subMenu
- )
- .AddItem(
- new MenuItemDefinition(
- PageNames.About,
- L("About"),
- url: "About",
- icon: "info"
- )
- ).AddItem( // Menu items below is just for demonstration!
- new MenuItemDefinition(
- "MultiLevelMenu",
- L("MultiLevelMenu"),
- icon: "menu"
- ).AddItem(
- new MenuItemDefinition(
- "AspNetBoilerplate",
- new FixedLocalizableString("ASP.NET Boilerplate")
- ).AddItem(
- new MenuItemDefinition(
- "AspNetBoilerplateHome",
- new FixedLocalizableString("Home"),
- url: "https://aspnetboilerplate.com?ref=abptmpl"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetBoilerplateTemplates",
- new FixedLocalizableString("Templates"),
- url: "https://aspnetboilerplate.com/Templates?ref=abptmpl"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetBoilerplateSamples",
- new FixedLocalizableString("Samples"),
- url: "https://aspnetboilerplate.com/Samples?ref=abptmpl"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetBoilerplateDocuments",
- new FixedLocalizableString("Documents"),
- url: "https://aspnetboilerplate.com/Pages/Documents?ref=abptmpl"
- )
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZero",
- new FixedLocalizableString("ASP.NET Zero")
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZeroHome",
- new FixedLocalizableString("Home"),
- url: "https://aspnetzero.com?ref=abptmpl"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZeroDescription",
- new FixedLocalizableString("Description"),
- url: "https://aspnetzero.com/?ref=abptmpl#description"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZeroFeatures",
- new FixedLocalizableString("Features"),
- url: "https://aspnetzero.com/?ref=abptmpl#features"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZeroPricing",
- new FixedLocalizableString("Pricing"),
- url: "https://aspnetzero.com/?ref=abptmpl#pricing"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZeroFaq",
- new FixedLocalizableString("Faq"),
- url: "https://aspnetzero.com/Faq?ref=abptmpl"
- )
- ).AddItem(
- new MenuItemDefinition(
- "AspNetZeroDocuments",
- new FixedLocalizableString("Documents"),
- url: "https://aspnetzero.com/Documents?ref=abptmpl"
- )
- )
- )
- );
- }
- private static ILocalizableString L(string name)
- {
- return new LocalizableString(name, TPLMSConsts.LocalizationSourceName);
- }
- }
- }
4. 在Visual Studio 2017的“解决方案资源管理器”中,找到“ABP.TPLMS.Application”项目中的“Modules”目录,在编辑器中打开 IModuleAppService.cs
接口文件。添加获取全部模块的代码。代码如下。
- List<Module> GetAll();
5. 在Visual Studio 2017的“解决方案资源管理器”中,找到“ABP.TPLMS.Application”项目中的“Modules”目录,在编辑器中打开 ModuleAppService.cs
文件。添加获取全部模块的代码。代码如下。
- public List<Module> GetAll()
- {
- var books = _moduleRepository.GetAllList();
- return books;
- }
6. 前端代码不用作任何修改。在Visual Studio 2017中按F5运行应用程序。登录之后,效果如下图。
abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)的更多相关文章
- abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)
系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI前端页面框架 (十八)
目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ab ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理一 (十九)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理二 (二十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理三 (二十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理四 (二十二)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之七(四十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- Abp(net core)+easyui+efcore实现仓储管理系统——出库管理之七(五十六)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
随机推荐
- 深入理解Apache Kafka
一.介绍 Kafka在世界享有盛名,大部分互联网公司都在使用它,那么它到底是什么呢? Kafka由LinkedIn公司于2011年推出,自那时起功能逐步迭代,目前演变成一个完整的平台级产品,它允许您冗 ...
- Flask+APScheduler定时任务
1.安装依赖 pip install flask_apscheduler 2.使用定时任务 ```python from flask import Flask from flask_apschedul ...
- Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍
模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...
- 1和new Number(1)有什么区别
1和new Number(1)有什么区别 author: @Tiffanysbear 总结,两者的区别就是原始类型和包装对象的区别. 什么是包装对象 对象Number.String.Boolean分别 ...
- LR(1)语法分析器生成器(生成Action表和Goto表)java实现(二)
本来这次想好好写一下博客的...结果耐心有限,又想着烂尾总比断更好些.于是还是把后续代码贴上.不过后续代码是继续贴在BNF容器里面的...可能会显得有些臃肿.但目前管不了那么多了.先贴上来吧hhh.说 ...
- 从源码看Flask框架配置管理
1 引言 Flask作为Python语言web开发的三大顶梁柱框架之一,对于配置的管理当然必不可少.一个应用从开发到测试到最后的产品发布,往往都需要多种不同的配置,例如是否开启调试模式.使用哪个数据库 ...
- java集合类的相关转换
下面的的案例,基本上是以代码为主,文字的描述较少,后期有时间会继续添加. ArrayToList public void ArrayToList() { System.out.println(&quo ...
- word2vec原理分析
本文摘录整编了一些理论介绍,推导了word2vec中的数学原理,理论部分大量参考<word2vec中的数学原理详解>. 背景 语言模型 在统计自然语言处理中,语言模型指的是计算一个句子的概 ...
- 洛谷 P1939 矩阵加速(数列)
题意简述 \(a[1]=a[2]=a[3]=1\) \(a[x]=a[x−3]+a[x−1](x>3)\) 求a数列的第n项对1000000007取余的值. 题解思路 矩阵加速 设\[ F=\b ...
- Git原理入门简析
为了获得更好的阅读体验,建议访问原地址:传送门 前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的 ...