树状菜单

2 篇文章 0 订阅

树结构类

    public class DepartmentNode
    {
        public int ID { get; set; }
        public string Name { get; set; }

        public int? ParentID { get; set; }
        public DepartmentNode Parent { get; set; }
        public int? Order { get; set; }
        public ICollection<DepartmentNode> Children { get; set; }

        public DepartmentNode(Department department) 
        {
            this.ID = department.ID;
            this.Name = department.Name;
            this.Order = department.Order;
            if (department.Parent != null) 
            {
                this.Parent = new DepartmentNode(department.Parent);
                this.ParentID = Parent.ID;
            }
        }

        public DepartmentNode() { }
    }

生成树

        public DepartmentNode GetDepartmentTree()
        {
            List<DepartmentNode> nodes = new List<DepartmentNode>();
            List<Department> departments = this.repo.GetAll().ToList();

            foreach(var dept in departments)
            {
                var node = new DepartmentNode(dept);
                nodes.Add(node);
            }

            foreach(var node in nodes)
            {
                if(node.Parent!=null)
                {
                    var child = from n in nodes where n.ParentID == node.ID select n;
                    node.Children = child.ToList();
                }
            }

            var top  = nodes.Where(x=>x.ID==1).Single();
            top.Children = nodes.Where( x => x.ParentID==1).ToList();
            return top;
        }

js解析树

//遍历Json 获取树状菜单
                $.getJSON("/Admin/GetDepartmentTree", function (data)
                {
                    var showlist = $("<ul></ul>");
                    var menu_list = data.Children;
                    showall(menu_list, showlist);
                    function showall(menu_list, parent) {
                        for (var menu in menu_list) {
                            //如果有子节点,则遍历该子节点
                            if (menu_list[menu].Children.length > 0) {
                                //创建一个子节点li
                                var li = $("<li></li>");
                                //将li的文本设置好,并马上添加一个空白的ul子节点,并且将这个li添加到父亲节点中
                                $(li).append(menu_list[menu].Name).append("<ul></ul>").appendTo(parent);
                                //将空白的ul作为下一个递归遍历的父亲节点传入
                                showall(menu_list[menu].Children, $(li).children().eq(0));
                            }
                                //如果该节点没有子节点,则直接将该节点li以及文本创建好直接添加到父亲节点中
                            else {
                                $("<li></li>").append(menu_list[menu].Name).appendTo(parent);
                            }
                        }
                    }
                    $("#div_menu").append(showlist);
                });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值