今天因为菜单的问题, 需要用到递归算法, 在此记录一下:

1.表结构如下:(这里只是展示两个比较重要的字段) ,大家应该都看明白

2.先定义一个菜单结构类.

3.实现递归.

 private List<TreeChildViewModel>  AddChildN(string Pid)
{
var data = _perssionRepsonsityService.GetAllList().Where(x => x.ParentID == Pid);//这里是获取数据
List<TreeChildViewModel> list = new List<TreeChildViewModel>();
foreach (var item in data)
{
          //这一块主要是转换成TreeChidViewModel的值.
TreeChildViewModel childViewModel = new TreeChildViewModel();
childViewModel.id = item.ID;
childViewModel.component = item.Component;
childViewModel.name = item.Name;
childViewModel.meta_icon = item.Meta_icon;
childViewModel.meta_title = item.Meta_title;
childViewModel.meta_content = item.Meta_content;
childViewModel.treeChildren = GetChildList(childViewModel);
list.Add(childViewModel);
}
return list;
} public List<TreeChildViewModel> GetChildList(TreeChildViewModel treeChildView)
{
if (!_perssionRepsonsityService.IsExists(x => x.ParentID == treeChildView.id))
{
return null;
}
else
{
return AddChildN(treeChildView.id);
}
}

4.调用

public string  Client()
{
List<TreeChildViewModel> treeViewModels = new List<TreeChildViewModel>(); treeViewModels= AddChildN("");
  return  JsonConvert.SerializeObject(treeViewModels); 
}

5.结果展示

[
{
"id":"1",
"pathRouter":null,
"name":"用户管理",
"component":"123123",
"meta_title":null,
"meta_content":null,
"meta_icon":null,
"treeChildren":[
{
"id":"2",
"pathRouter":null,
"name":"table",
"component":"123123",
"meta_title":null,
"meta_content":null,
"meta_icon":null,
"treeChildren":[
{
"id":"5",
"pathRouter":null,
"name":"table",
"component":"123123",
"meta_title":null,
"meta_content":null,
"meta_icon":null,
"treeChildren":null
}
]
}
]
},
{
"id":"3",
"pathRouter":null,
"name":"table",
"component":"123123",
"meta_title":null,
"meta_content":null,
"meta_icon":null,
"treeChildren":[
{
"id":"4",
"pathRouter":null,
"name":"table",
"component":"123123",
"meta_title":null,
"meta_content":null,
"meta_icon":null,
"treeChildren":null
}
]
},
{
"id":"6",
"pathRouter":null,
"name":"table",
"component":"123123",
"meta_title":null,
"meta_content":null,
"meta_icon":null,
"treeChildren":null
}
]

6.这里是全部菜单获取的, 如果是根据角色来判断权限获取的话, 在AddChildN 的foreach 里面进行权限进行过滤, 如果该角色ID下的权限包含有相应的权限ID,则执行,否则,直接跳出循环. ,但是这最终还得根据实际表结构来进行过滤.

7.总结, 其实我这差不多是误打误撞写出来的,算做个记录吧..

C# 菜单之递归算法的更多相关文章

  1. JavaScript生成树形菜单(递归算法)

    1.最终效果图(这里仅为实现算法,并加载至页面,不做任何css界面优化) 注释:本示例包含三级目录菜单,但实际上可支持N级(可使用该代码自行测试) 2.数据源 菜单信息一般来源于数据库中数据表,且为自 ...

  2. luci框架-LUA的一个web框架使用

    转自:http://blog.csdn.net/initphp/article/details/17527639 LUCI 这个在百度上搜索除了一篇我的百度文库 luci 的介绍文章之外,前三页都是些 ...

  3. php实现无限级树型菜单(函数递归算法)

    首先到数据库取数据,放到一个数组,然后把数据转化为一个树型状的数组,最后把这个树型状的数组转为html代码.也可以将第二步和第三步合为一步. 详细如下:1.数据库设计:脚本如下:CREATE TABL ...

  4. js实现树级递归,通过js生成tree树形菜单(递归算法)

    方法封装: /** * 数据转换为树形(递归),示例:toTreeByRecursion(source, 'id', 'parentId', null, 'children') * @param {A ...

  5. 基于react实现无限分级菜单

    在开发CMS(内容管理系统)系统时,一般都会用到一个侧边栏或者顶部的二级或者三级菜单,当点击或者鼠标悬浮时,菜单能够随之展开或收起. 本文纯粹为了练习一下react,因此我会在react环境下实现这么 ...

  6. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

  7. 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询

    有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.tre ...

  8. vue的递归组件以及三级菜单的制作

    js里面有递归算法,同时,我们也可以利用props来实现vue模板的递归调用,但是前提是组件拥有 name 属性 父组件:slotDemo.vue: <template> <div& ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)

    实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案 ...

随机推荐

  1. CDI服务

    前言 CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现,可用于Dynamic Web Module中,将依赖注入IOC/D ...

  2. JAVA之enum类详解

    目录    一.简介    二.默认枚举类    三.多值枚举类    四.属性和方法    五.构造函数    六.重要方法    七.引用参考 一.简介    1.枚举类代表一组常量:    2. ...

  3. 使用 JWT 生成 Token 代码示例

    JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的.自包含的 JSON 对象在各方之间安全传输信息的方式.该信息含有数字签名,可以被验证和信任. ...

  4. PHP全栈学习笔记6

    php能做什么,它是运行在服务器端的,web网站大部分数据都是存储在服务器上的,PHP就是用来处理这些存储在服务器的数据.跨平台,服务器可以是多种平台上的服务器,脚本语言,免费. wampserver ...

  5. chrome谷歌浏览器开发者工具-网络带宽控制

    有时候我们想在本地测试一下图片预加载loading的加载情况,如下图: 可无奈一般网络带宽都比较好,基本上看不到效果,图片一下子就加载出来了, 可能这个时候有些小伙伴想到的办法是用定时器延迟加载 其实 ...

  6. Google 工程师:为什么 CDN 对移动客户端加速“没有”效果

    王者荣耀是近两年来比较火的手游,不少小伙伴都有玩过.玩这个游戏最怕的不是遇到猪一般的队友,也不是怕遇到神一样的对手.最让我们感到害怕和绝望的是,团战爆发时,而你 460 了.460 是一个玩家常用的词 ...

  7. rabbitmq实现向各服务广播消息

    广播fanout 主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定! 对生产者是解耦的 生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchan ...

  8. 利用GitLab webhook来实现触发Jenkins自动操作

    本文针对如何设置GitLab以及Jenkins,实现每次GitLab上有提交事件的时候,都能触发Jenkins执行相应的操作,主要分为以下几个步骤: 1.新建GitLab测试用例 进入个人GitLab ...

  9. Fescar(Seata)-Springcloud流程分析-1阶段

    Fescar是阿里18年开源的分布式事务的框架.Fescar的开源对分布式事务框架领域影响很大.作为开源大户,Fescar来自阿里的GTS,经历了好几次双十一的考验,一经开源便颇受关注.今天就来看了F ...

  10. Java基础系列-二进制操作

    原创文章,转载请标注出处:<Java基础系列-二进制操作> 概述 Java源码中涉及到大量的二进制操作,非常的复杂,但非常的快速. Java二进制表示法 首先了解下二进制,二进制是相对十进 ...