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

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. @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件

    目录 @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件 运行 使用 配置 svg-sprite-loader 调用当前环境下的颜色 props @vue/cl ...

  2. Javascript高级编程学习笔记(91)—— Canvas(8) 阴影

    阴影 2D上下文将会根据以下属性为形状或路径绘制阴影 shadowColor: 用于设置阴影颜色,默认为黑色 shadowOffsetX: 形状或路径X方向的阴影偏移量,默认为0 shadowOffs ...

  3. Vuex,状态管理模式

    对于 Vue 本人目前接触不深,只得浅层分析,Vue 是单向数据流, state,驱动应用的数据源: view,以声明方式将 state 映射到视图: actions,响应在 view 上的用户输入导 ...

  4. 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换

    目录 02:数据类型转换 && 隐式转换 || 显式转换 02:数据类型转换 && 隐式转换 || 显式转换 在上一个章节中,我们介绍了 JavaScript 的基本的 ...

  5. SpringBoot入门教程(二十一)IntelliJ IDEA配置Quartz启动项

    本地运行:

  6. C++ 编译期封装-Pimpl技术

    Pimpl技术——编译期封装 Pimpl 意思为“具体实现的指针”(Pointer to Implementation), 它通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏, 是隐藏实 ...

  7. 如何大幅提升web前端性能之看tengine在大公司架构实践

    在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构 ...

  8. 深入解读MySQL8.0 新特性 :Crash Safe DDL

    前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别.而实际上innodb本身也存储有元数据信息.这 ...

  9. 一次node-sass安装记录

    node-sass的版本是3.9.3 Please restart this script from an administrative PowerShell! 在当前powershell中执行下命令 ...

  10. axios(封装使用、拦截特定请求、判断所有请求加载完毕)

    博客地址:https://ainyi.com/71 基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 Node.js 中使用 vue2.0之后,就不再对 vue-resource 更新 ...