应无所住,而生其心
排名
6
文章
6
粉丝
16
评论
8
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core3.x递归树形解析

8750人阅读 2020/7/17 19:17 总访问:5416648 评论:0 收藏:0 手机
分类: .NET Core

写好树形需要的model,我这里前端的树形用的是jstree,按照他的格式来即可,

  1. public class JsTreeViewModel
  2. {
  3.     public int Id { getset; }
  4.     public string text { getset; }
  5.     public string icon { getset; }
  6.     public List<JsTreeViewModel> children = new List<JsTreeViewModel>();
  7. }

写好递归树形解析方法,其实就是把数据库的数据解析成一个List<JsTreeViewModel>

  1. public void ParseTree(List<MyNoteFile> departments, List<JsTreeViewModel> treeModels, int? parentId)
  2. {
  3.     //找当前层级下级(如果parentId==null那就是第一级)
  4.     List<MyNoteFile> result = departments.Where(a => a.ParentId == parentId).OrderBy(a => a.NoteFileOrder).ToList();
  5.     foreach (MyNoteFile item in result)
  6.     {
  7.         JsTreeViewModel treeModel = new JsTreeViewModel();
  8.         treeModel.Id = item.Id;
  9.         treeModel.text = item.FileName;
  10.         treeModel.icon = item.Style;
  11.         //递归
  12.         ParseTree(departments, treeModel.children, treeModel.Id);
  13.         treeModels.Add(treeModel);
  14.     }
  15. }
  16. [HttpGet]
  17. public ContentResult GetTreeData(DTO_LoginInfo loginInfo)
  18. {
  19.     List<MyNoteFile> myNoteFiles = _myNoteFileDAL.GetMyNoteFileByUserId(loginInfo.UserId);
  20.     //递归解析数据
  21.     List<JsTreeViewModel> treeModels = new List<JsTreeViewModel>();
  22.     ParseTree(myNoteFiles, treeModels, null);
  23.     string jsonStr = JsonConvert.SerializeObject(treeModels);
  24.     return Content(jsonStr, "application/json");
  25. }

注意:.net core3.x使用的json序列化类是System.Text.Json.JsonSerializer,据说效率快一点。但是在序列化这种树形的时候有点问题,它只能序列化一级出来,所以我这里换成了Newtonsoft.Json类




然后,数据解析好了,前端调用就很简单了

代码如下:

  1. $("#tree_3").jstree({
  2.     "core": {
  3.         "themes": {
  4.             "responsive"false
  5.         },
  6.         // 允许回调
  7.         "check_callback"true,
  8.         'data': {
  9.             'url'function (node{
  10.                 return '/mynote/GetTreeData';
  11.             }
  12.         }
  13.     },
  14.     "types": {
  15.         "default": {
  16.             "icon""fa fa-folder icon-state-warning icon-lg"
  17.         },
  18.         "file": {
  19.             "icon""fa fa-file icon-state-warning icon-lg"
  20.         }
  21.     },
  22.     "state": { "key""demo2" },
  23.     "plugins": ["contextmenu""dnd""state""types"],
  24. });

效果如下:

可以换换数据库看看效果:


嘿嘿,饭做好了吃饭!

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价