Net递归查询组装tree树形菜单,layui以及jQuery的zTree共用

大家都知道组织树形菜单都会存在上下级的关系,后台获取到所有的菜单,可是怎么组织树形菜单,不可能写几十个foreach来循环吧,一般通过递归算法来写。

首先写一个类,组织树形菜单模型,这个类可以根据layui或者zTree的官方api定制不同的属性

public class TreeList
    {
        public string title { get; set; }
        public string id { get; set; }
        public string field { get;set;}
        public List<TreeList> children { get; set; }

        public bool open { get; set; }

        public string href { get; set; }

        public bool issys { get; set; }

    }

接下来,使用递归算法,组织树形数据,返回前端直接使用插件绑定即可

/// <summary>
        /// 组织树形菜单数据
        /// </summary>
        /// <param name="data">数据集合</param>
        /// <param name="recordId">可以是id,首次可以传空</param>
        /// <returns></returns>
        public List<TreeList> GetTreeList(List<DirectoryDto> data,string recordId)
        {
            List<TreeList> treeList = new List<TreeList>();
            recordId = string.IsNullOrEmpty(recordId) ? "default" : recordId;
            //获取id的所有下级
            List<DirectoryDto> dataList = data.Where(u => u.ParentId == recordId).ToList();
            foreach (var item in dataList)
            {
                TreeList model = new TreeList();
                model.id = item.RecordId;
                model.title = item.Name;
                model.field = item.ParentId;
                if (item.ParentId== "default"&&item.Name== "工会资料")
                {
                    model.open = true;
                }
                //循环调用,获取当前的子目录
                model.children=GetTreeList(data,item.RecordId);
                treeList.Add(model);
            }
            return treeList;
        }

在需要的控制器中调用即可

//组织树形菜单结构
                //Dictionary<string>
                List<TreeList> treeList = new List<TreeList>();
                if (result.Data!=null && result.Data.Count()>0)
                {
                    result.Data = result.Data.OrderBy(u => u.AddTime).ToList();
                    //treeList = ZuZhiTree(result.Data.ToList());
                    treeList = GetTreeList(result.Data.ToList(), "");
                }
                return Json(new { data= treeList });

根据不同的插件,直接绑定即可,此处使用的zTree ,使用layui一样的可以使用,之前也是使用的layui,只是方便统一,前端改成了Ztree

//树形
        var settingss = {
            data: {
                simpleData: {
                    enable: true,  //true 、 false 分别表示 使用 、 不使用 简单数据模式
                    idKey: "id",  //节点数据中保存唯一标识的属性名称
                    pIdKey: "field",    //节点数据中保存其父节点唯一标识的属性名称
                    //rootPId: -1  //用于修正根节点父节点数据,即 pIdKey 指定的属性值
                },
                key: {
                    name: "title"  //zTree 节点数据保存节点名称的属性名称  默认值:"name"
                }
            },
            check: {
                enable: true,  //true 、 false 分别表示 显示 、不显示 复选框或单选框
                nocheckInherit: true  //当父节点设置 nocheck = true 时,设置子节点是否自动继承 nocheck = true
            },
            callback: {
                beforeClick: zTreeBeforeClick,
                //onExpand: zTreeOnExpand
            }

        };

        //数据
        var zTreeObj;
        $.ajax({
           url: "@Url.Content("~/UnionData/GetDirectory")",
           type: "get",
            success: function (res) {
                var resdata = eval(res);
                //console.log(resdata.data);
                //var data = "[" + resdata.data + "]";
                console.log(resdata.data);
                if (resdata.data != null || resdata.data!="") {
                    zNodes = resdata.data;
                    zTreeObj = $.fn.zTree.init($("#treeDemo"), settingss, zNodes); //初始化树
                    //zTreeObj.expandAll(true);    //true 节点全部展开、false节点收缩
                } else {
                    $("#treeDemo").html("<li><span>暂无授权目录可使用</span></li>")
                }

            }
        })

效果如下

无线下级都可以

作者自己写的网站:www.51wzuan.cn   --- 51网赚网

该网站主要分享一些可以手机兼职赚钱的方法,各位大佬,如有兴趣,可以提以下小小意见。谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜钓星云

如果解决了问题/赏点吧/饿死了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值