asp.net+EF 递归生成树结构返回json


项目是前后端分离,所以只写接口

ENTITY层:

 public class VM_Menu
    {
        public string ID { get; set; }
        public string MenuCode { get; set; }
        public string MenuDesc { get; set; }
        public string MenuURL { get; set; }
        public string ParentMenuID { get; set; }
        public Nullable<int> Sequence { get; set; }
        public string CreateUserID { get; set; }
        public Nullable<System.DateTime> CreateDate { get; set; }
        public string UpdateUserID { get; set; }
        public Nullable<System.DateTime> UpdateDate { get; set; }
        public string MenuIcon { get; set; }
        //添加子级菜单
        public object ChildMenu { get; set; }
    }

 BLL层:

        /// <summary>
        /// 获取菜单树结构
        /// </summary>
        /// <returns></returns>
        public List<VM_Menu> GetMenuTree()
        {
            var allMenuList = GetMenu().ToList();
            List<VM_Menu> rootNodeList = new List<VM_Menu>();
            foreach (var parentNodeList in allMenuList.Where(t => t.ParentMenuID == null))
            {
                VM_Menu menuNode = new VM_Menu();
                menuNode.ID = parentNodeList.ID;
                menuNode.MenuCode = parentNodeList.MenuCode;
                menuNode.MenuDesc = parentNodeList.MenuDesc;
                menuNode.MenuURL = parentNodeList.MenuURL;
                menuNode.ParentMenuID = parentNodeList.ParentMenuID;
                menuNode.Sequence = parentNodeList.Sequence;
                menuNode.CreateUserID = parentNodeList.CreateUserID;
                menuNode.CreateDate = parentNodeList.CreateDate;
                menuNode.UpdateUserID = parentNodeList.UpdateUserID;
                menuNode.UpdateDate = parentNodeList.UpdateDate;
                menuNode.MenuIcon = parentNodeList.MenuIcon;
                menuNode.ChildMenu = CreateChildTree(allMenuList, menuNode);
                rootNodeList.Add(menuNode);
            }
            return rootNodeList;
        }
        /// <summary>
        /// 递归生成子树
        /// </summary>
        /// <param name="AllMenuList"></param>
        /// <param name="vmMenu"></param>
        /// <returns></returns>
        private List<VM_Menu> CreateChildTree(List<AM_MENU> AllMenuList, VM_Menu vmMenu)
        {
            string parentMenuID = vmMenu.ID;//根节点ID
            List<VM_Menu> nodeList = new List<VM_Menu>();
            var children = AllMenuList.Where(t => t.ParentMenuID == parentMenuID);
            foreach (var chl in children)
            {
                VM_Menu node = new VM_Menu();
                node.ID = chl.ID;
                node.MenuCode = chl.MenuCode;
                node.MenuDesc = chl.MenuDesc;
                node.MenuURL = chl.MenuURL;
                node.ParentMenuID = chl.ParentMenuID;
                node.Sequence = chl.Sequence;
                node.CreateUserID = chl.CreateUserID;
                node.CreateDate = chl.CreateDate;
                node.UpdateUserID = chl.UpdateUserID;
                node.UpdateDate = chl.UpdateDate;
                node.MenuIcon = chl.MenuIcon;
                node.ChildMenu = CreateChildTree(AllMenuList, node);
                nodeList.Add(node);
            }
            return nodeList;
        }

View层:

        /// <summary>
        /// 获取菜单树结构
        /// </summary>
        /// <returns></returns>
        public HttpResponseMessage GetMenuTree()
        {
            List<VM_Menu> list = b_authority.GetMenuTree();
            return PageHelper.GetPageList(list);
        }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM