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

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

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

3.实现递归.

  1. private List<TreeChildViewModel> AddChildN(string Pid)
  2. {
  3. var data = _perssionRepsonsityService.GetAllList().Where(x => x.ParentID == Pid);//这里是获取数据
  4. List<TreeChildViewModel> list = new List<TreeChildViewModel>();
  5. foreach (var item in data)
  6. {
              //这一块主要是转换成TreeChidViewModel的值.
  7. TreeChildViewModel childViewModel = new TreeChildViewModel();
  8. childViewModel.id = item.ID;
  9. childViewModel.component = item.Component;
  10. childViewModel.name = item.Name;
  11. childViewModel.meta_icon = item.Meta_icon;
  12. childViewModel.meta_title = item.Meta_title;
  13. childViewModel.meta_content = item.Meta_content;
  14. childViewModel.treeChildren = GetChildList(childViewModel);
  15. list.Add(childViewModel);
  16. }
  17. return list;
  18. }
  19.  
  20. public List<TreeChildViewModel> GetChildList(TreeChildViewModel treeChildView)
  21. {
  22. if (!_perssionRepsonsityService.IsExists(x => x.ParentID == treeChildView.id))
  23. {
  24. return null;
  25. }
  26. else
  27. {
  28. return AddChildN(treeChildView.id);
  29. }
  30. }

4.调用

  1. public string Client()
  2. {
  3. List<TreeChildViewModel> treeViewModels = new List<TreeChildViewModel>();
  4.  
  5. treeViewModels= AddChildN("");
  6.   return  JsonConvert.SerializeObject(treeViewModels); 
  7. }

5.结果展示

  1. [
  2. {
  3. "id":"1",
  4. "pathRouter":null,
  5. "name":"用户管理",
  6. "component":"123123",
  7. "meta_title":null,
  8. "meta_content":null,
  9. "meta_icon":null,
  10. "treeChildren":[
  11. {
  12. "id":"2",
  13. "pathRouter":null,
  14. "name":"table",
  15. "component":"123123",
  16. "meta_title":null,
  17. "meta_content":null,
  18. "meta_icon":null,
  19. "treeChildren":[
  20. {
  21. "id":"5",
  22. "pathRouter":null,
  23. "name":"table",
  24. "component":"123123",
  25. "meta_title":null,
  26. "meta_content":null,
  27. "meta_icon":null,
  28. "treeChildren":null
  29. }
  30. ]
  31. }
  32. ]
  33. },
  34. {
  35. "id":"3",
  36. "pathRouter":null,
  37. "name":"table",
  38. "component":"123123",
  39. "meta_title":null,
  40. "meta_content":null,
  41. "meta_icon":null,
  42. "treeChildren":[
  43. {
  44. "id":"4",
  45. "pathRouter":null,
  46. "name":"table",
  47. "component":"123123",
  48. "meta_title":null,
  49. "meta_content":null,
  50. "meta_icon":null,
  51. "treeChildren":null
  52. }
  53. ]
  54. },
  55. {
  56. "id":"6",
  57. "pathRouter":null,
  58. "name":"table",
  59. "component":"123123",
  60. "meta_title":null,
  61. "meta_content":null,
  62. "meta_icon":null,
  63. "treeChildren":null
  64. }
  65. ]

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. .NET WebAPI中使用Session使用

    问题及其解决方案: 今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.net webapi中存入我随机生成的短信验证码方便与前端传递过来的数据对比,所以决定使用session做缓存.但 ...

  2. PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类. 类,属性和方法,类,对象,面向对象编程的三大特点.特点,封装性,继承性,多态性. 封装性 ...

  3. 跟我一起学opencv 第二课之图像的掩膜操作

    1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...

  4. 【重学计算机】机组D4章:存储系统

    1. 存储系统层次结构 主存速度缓慢的原因:主存增速与CPU不同步,执行指令期间多次访问主存 主存容量不足的原因: 存在制约主存容量的技术因素:如由CPU.主板等相关技术指标规定了主存容量 应用对主存 ...

  5. 机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构

    0.决策树 决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别. 决策树学习是以实例为基础的归纳学习 决策树学习采用的是自顶向下的递归方 ...

  6. springboot~@Query到DTO对象

    我们有时在进行开发过程中,使用jpa的@Query注解去选择多张表然后返回一个DTO对象,这个时候我们需要特殊处理一下,因为默认情况下,你的jpa代码是不认DTO对象的. 参考文章:https://s ...

  7. Node.js学习(第一章:Node.js安装和模块化理解)

    Node.js安装和简单使用 安装方法 简单的安装方式是直接官网下载,然后本地安装即可.官网地址:nodejs.org Windows系统下,选择和系统版本匹配的.msi后缀的安装文件.Mac OS ...

  8. 解决WebMagic抓HTTPS时出现SSLException

    访问我的博客 前言 在今年二月份在项目中引入了 WebMagic 技术,用来抓取合作方的书籍,详见之前文章:WebMagic之爬虫监控,这两天新接入了一个合作商,对方接口采取的是 HTTPS 协议,而 ...

  9. hash一致性

    参照:https://www.cnblogs.com/moonandstar08/p/5405991.html 参照:http://www.cnblogs.com/haippy/archive/201 ...

  10. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...