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

摘要:
6私有字符串图标;}25}26公共字符串27{28获取{return_icon;}34设置{_url=值;}40}41公共对象菜单42{43获取{return _menus;列表=InitTree();13jt.text=plist.Name;jt);19rootNode.Add(jt);

0、数据表结构,主要属性有:Id、parentId(父节Id)、Text、Url……等等。

asp.net mvc+EF 递归生成树结构返回json第1张

1、新建一个树结构MenuModels

asp.net mvc+EF 递归生成树结构返回json第2张asp.net mvc+EF 递归生成树结构返回json第3张
 1    public class MenuModels
 2     {
 3         private int _id;
 4         private string _text;
 5         private int? _parentid;
 6         private string _icon;
 7         private string _url;
 8         private object _menus;
 9         private Dictionary<string, string> _attributes = new Dictionary<string, string>();
10 
11         public int id
12         {
13             get { return _id; }
14             set { _id = value; }
15         }
16         public int? parentid
17         {
18             get { return _parentid; }
19             set { _parentid = value; }
20         }
21         public string text
22         {
23             get { return _text; }
24             set { _text = value; }
25         }
26         public string icon
27         {
28             get { return _icon; }
29             set { _icon = value; }
30         }
31         public string url
32         {
33             get { return _url; }
34             set { _url = value; }
35         }
36         public Dictionary<string, string> attributes
37         {
38             get { return _attributes; }
39             set { _attributes = value; }
40         }
41         public object menus
42         {
43             get { return _menus; }
44             set { _menus = value; }
45         }
46     }
View Code

2、在控制器中新建如下方法:

asp.net mvc+EF 递归生成树结构返回json第4张asp.net mvc+EF 递归生成树结构返回json第5张
1 /// <summary>
2         /// 加载树
3         /// </summary>
4         /// <returns></returns>
5         public JsonResult LoadTree()
6         {
7             List<MenuModels> list = InitTree();
8             return Json(list, "text/html", JsonRequestBehavior.AllowGet);
9         }
View Code
asp.net mvc+EF 递归生成树结构返回json第6张asp.net mvc+EF 递归生成树结构返回json第7张
 1  /// <summary>
 2         /// 初始化树 默认找出顶级菜单
 3         /// </summary>
 4         /// <returns></returns>
 5         public List<MenuModels> InitTree()
 6         {
 7             var TreeList = _db.Cent_Tree.ToList();
 8             List<MenuModels> rootNode = new List<MenuModels>();
 9             foreach (var plist in TreeList.Where(t => t.ParentID == null))
10             {
11                 MenuModels jt = new MenuModels();
12                 jt.id = plist.ID;
13                 jt.text = plist.Name;
14                 jt.parentid = plist.ParentID;
15                 jt.icon = "";
16                 jt.url = plist.SystemUrl;
17                 jt.attributes = CreateUrl(TreeList, jt);
18                 jt.menus = CreateChildTree(TreeList, jt);
19                 rootNode.Add(jt);
20             }
21             return rootNode;
22         }
23         /// <summary>
24         /// 递归生成子树
25         /// </summary>
26         /// <param name="TreeList"></param>
27         /// <param name="jt"></param>
28         /// <returns></returns>
29         private List<MenuModels> CreateChildTree(List<Cent_Tree> TreeList, MenuModels jt)
30         {
31             int keyid = jt.id;//根节点ID
32             List<MenuModels> nodeList = new List<MenuModels>();
33             var children = TreeList.Where(t => t.ParentID == keyid);
34             foreach (var chl in children)
35             {
36                 MenuModels node = new MenuModels();
37                 node.id = chl.ID;
38                 node.text = chl.Name;
39                 node.parentid = chl.ParentID;
40                 node.icon = "";
41                 node.url = chl.SystemUrl;
42                 node.attributes = CreateUrl(TreeList, node);
43                 node.menus = CreateChildTree(TreeList, node);
44                 nodeList.Add(node);
45             }
46             return nodeList;
47         }
48         /// <summary>
49         /// 把Url属性添加到attribute中,如果需要别的属性,也可以在这里添加
50         /// </summary>
51         /// <param name="TreeList"></param>
52         /// <param name="jt"></param>
53         /// <returns></returns>
54         private Dictionary<string, string> CreateUrl(List<Cent_Tree> TreeList, MenuModels jt)
55         {
56             Dictionary<string, string> dic = new Dictionary<string, string>();
57             int keyid = jt.id;
58             var urlList = TreeList.Where(t => t.ID == keyid).SingleOrDefault();
59             string Sysurl = urlList.SystemUrl;
60             string Indexurl = urlList.IndexUrl;
61             dic.Add("sysurl", Sysurl);
62             dic.Add("indurl", Indexurl);
63             dic.Add("close", "true");
64             return dic;
65         }
View Code

3、运行,http://localhost/Home/loadtree

免责声明:文章转载自《asp.net mvc+EF 递归生成树结构返回json》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)MySQL 8 新特性之Clone PluginAndroid中的单元测试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 内置函数

SQL中的单记录函数 1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE--------- --------- --------- ---------65 97 4...

细说 Form (表单)

细说 Form (表单) 阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Ajax方式提交整个表单 以Ajax方式提交部分表单 使用JQuery,就不要再拼URL了! id, name 有什么关系 使用C#...

JSON数据的处理中的特殊字符

     JSON如今是非经常见的处理数据的方式了。但因为自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台 var obj = jQuery.parseJSON(msg);会转换失败。     比如例如以下在Vs中能够看到仅仅有两个字符    可实际上却有三个字符,使用notepad++打开 一直不明确这些字符是怎样进...

前端vue使用stomp.js、sock.js完成websocket

前端vue使用stomp.js、sock.js完成websocket Sock.js Sock.js 是一个JavaScript库,为了应对很多浏览器不支持websocket协议问题。SockJ会自动对应websocket,如果websocket不可用,就会自动降为轮训的方式。 Stomp.js STOMP-Simple Text Oriented Mes...

微信支付方式区分

第一: JSAPI支付     https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 使用场景:JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款 使用实例 A:线下实例   B:公众号场景   C:PC网站场景            A: ...

小程序换行符检测换行

先将换行符替换成自定义连接字符 var goods_detail = "" if(res.data.info.goods_info.goods_detail){ goods_detail = res.data.info.goods_info.goods_detail; var str=goods_detail.replace(/ /g,"|-&")...