.Net Core通过json文件 配置管理后台导航菜单
先来看个最终效果图

以前我们配置后台菜单 一般都是把菜单链接, 图标, 以及层级关系 配置到数据库,Core很容易通过json文件来配置导航菜单 而不用存数据库了
先添加个menuconfig.json 文件,来看下json文件的结构

其中Url 就是链接地址,Icon就是要显示的图标 通过childs 这样层级关系就有了
在Startup.cs 里添加这个json配置文件
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("menuconfig.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables(); Configuration = builder.Build();
}
注意 AddJsonFile 这个 第二个参数 optional: (Whether the file is optional)是否可选,意思是如果配置文件不存在的时候是否要抛异常。
第三个参数 reloadOnChange json文件更改后是否重新加载。
然后在 ConfigureServices 里做注册
services.Configure<MenuCollectionConfig>(Configuration.GetSection("MenuCollectionConfig"));
public class MenuCollectionConfig
{
public MenuItem[] MenuItems { get; set; }
} public class MenuItem
{
public string Name { get; set; } public string Resource { get; set; } public string Url { get; set; } public string SubNavUrl { get; set; } public string Icon { get; set; }
public MenuItem[] Childs { get; set; }
}
这样在Controller的 构造函数中注入
private readonly IOptions<MenuCollectionConfig> _menus;
public HomeController(
IOptions<MenuCollectionConfig> menus)
{
_menus = menus;
}
public IActionResult Index()
{
List<MenuItem> menus = new List<MenuItem>();
foreach(var item in _menus.Value.MenuItems)
{
List<MenuItem> secondChilds = CheckChilds(item.Childs);
if (secondChilds.Count > )
{
MenuItem newItem = new MenuItem();
newItem.Name = item.Name;
newItem.Icon = item.Icon;
newItem.Resource = item.Resource;
newItem.SubNavUrl = item.SubNavUrl;
newItem.Url = item.Url;
newItem.Childs = secondChilds.ToArray();
menus.Add(newItem);
}
}
MenuCollectionConfig config = new MenuCollectionConfig();
config.MenuItems = menus.ToArray();
ViewBag.Menus = JsonConvert.SerializeObject(config);
return View();
}
private List<MenuItem> CheckChilds(IEnumerable<MenuItem> childs)
{
List<MenuItem> result = new List<MenuItem>();
foreach (var item in childs)
{
if (item.Childs != null)
{
List<MenuItem> thirdLevelMenu = CheckChilds(item.Childs);
if (thirdLevelMenu.Count > )
{
MenuItem newItem = new MenuItem();
newItem.Name = item.Name;
newItem.Icon = item.Icon;
newItem.Resource = item.Resource;
newItem.SubNavUrl = item.SubNavUrl;
newItem.Url = item.Url;
newItem.Childs = thirdLevelMenu.ToArray();
result.Add(newItem);
}
}
else
{
result.Add(item);
}
}
return result;
}
注意 CheckChilds 方法里有个递归 这样无限层级的也能实现 当然后台最多3级也差不多了
博客经个人辛苦努力所得,如有转载会特别申明,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律
原文地址: https://www.cnblogs.com/alonglonga/p/11876300.html 小赫赫首发
有问题联系Q: 591811930
.Net Core通过json文件 配置管理后台导航菜单的更多相关文章
- ASP.NET Core appsettings.json 文件
ASP.NET Core appsettings.json 文件 在本节中,我们将讨论 ASP.NET Core 项目中appsettings.json文件的重要性. 在以前的 ASP.NET 版本中 ...
- ASP.NET Core launchsettings.json 文件
ASP.NET Core launchsettings.json 文件 在本节中,我们将讨论在 ASP.NET Core 项目中launchsettings.json文件的重要性. launchset ...
- ASP.NET Core 在 JSON 文件中配置依赖注入
前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...
- 转载:ASP.NET Core 在 JSON 文件中配置依赖注入
在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.Stri ...
- 使用.net core读取Json文件配置
1.使用vs2017创建一个应用台程序 2.使用程序包管理器控制台执行命令 Install-Package Microsoft.AspNetCore -Version 2.0.1 3.创建一个json ...
- .net core 读取json文件
核心代码 Program.cs: using System; using System.IO; using Microsoft.Extensions.Configuration; namespace ...
- opencart 后台导航菜单添加步骤
1,找到在catalog\language\english\common\header.php // Text$_['text_affiliate'] = 'Affiliates';$_['text_ ...
- WordPress主题开发:开启导航菜单功能
步骤一:开启导航菜单功能 <?php /* register_nav_menu( $location, $description ) 函数功能:开启导航菜单功能 @参数 string $loca ...
- .net core - 配置管理 - json文件配置
Json 文件配置 public class Startup { public Startup(IHostingEnvironment env) { var builder = new Configu ...
随机推荐
- Java基于OpenCV实现走迷宫(图片+路线展示)
Java基于OpenCV实现走迷宫(图片+路线展示) 由于疫情,待在家中,太过无聊.同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来.特此记录. 原图: 这张图,由于不是非常清晰, ...
- C++快读模板
C++的快速读入模板 inline int read() { ; char ch = getchar(); ') { if (ch == '-') flag = true; ch = getchar( ...
- 踩坑:windows系统下,nodejs版本管理器无法使用n来管理
错误 :在windows系统下,需要npm 一个n来管理nodejs的版本,但是使用npm install -g n命令之后报错 原因 : n 不支持 windows系统 只支持mac系统.
- 用什么库写 Python 命令行程序?看这一篇就够了
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- 【论文笔记系列】AutoML:A Survey of State-of-the-art (上)
之前已经发过一篇文章来介绍我写的AutoML综述,最近把文章内容做了更新,所以这篇稍微细致地介绍一下.由于篇幅有限,下面介绍的方法中涉及到的细节感兴趣的可以移步到论文中查看. 论文地址:https:/ ...
- ROS可视化工具RViz的简单使用教程
1.安装rviz sudo apt-get install ros-melodic-rviz 环境检测.安装 rosdep install rviz rosmake rviz startup(开两个 ...
- Codevs 1205 单词反转(Vector以及如何输出string)
题意:倒序输出句子中的单词 代码: #include<cstdio> #include<iostream> #include<string> #include< ...
- js算法题
//较Low,看到的大神 帮补充 1.给定一个数组:,定义一个函数获取数组中所有的奇数,返回一个新数组:var arr1=[1,3,4,5,6,7,8,3,4,2,3,6]; function ...
- ugligy 转
3.配置gulpfile.js 3.1.基本使用 JavaScript 1 2 3 4 5 6 7 8 var gulp = require('gulp'), uglify = require ...
- Latent Representation Learning For Artificial Bandwidth Extension Using A Conditional Variational Auto-Encoder
博客作者:凌逆战 论文地址:https://ieeexplore.ieee.xilesou.top/abstract/document/8683611/ 地址:https://www.cnblogs. ...