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

1、新建一个树结构MenuModels

    public class MenuModels
{
private int _id;
private string _text;
private int? _parentid;
private string _icon;
private string _url;
private object _menus;
private Dictionary<string, string> _attributes = new Dictionary<string, string>(); public int id
{
get { return _id; }
set { _id = value; }
}
public int? parentid
{
get { return _parentid; }
set { _parentid = value; }
}
public string text
{
get { return _text; }
set { _text = value; }
}
public string icon
{
get { return _icon; }
set { _icon = value; }
}
public string url
{
get { return _url; }
set { _url = value; }
}
public Dictionary<string, string> attributes
{
get { return _attributes; }
set { _attributes = value; }
}
public object menus
{
get { return _menus; }
set { _menus = value; }
}
}

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

 /// <summary>
/// 加载树
/// </summary>
/// <returns></returns>
public JsonResult LoadTree()
{
List<MenuModels> list = InitTree();
return Json(list, "text/html", JsonRequestBehavior.AllowGet);
}
  /// <summary>
/// 初始化树 默认找出顶级菜单
/// </summary>
/// <returns></returns>
public List<MenuModels> InitTree()
{
var TreeList = _db.Cent_Tree.ToList();
List<MenuModels> rootNode = new List<MenuModels>();
foreach (var plist in TreeList.Where(t => t.ParentID == null))
{
MenuModels jt = new MenuModels();
jt.id = plist.ID;
jt.text = plist.Name;
jt.parentid = plist.ParentID;
jt.icon = "";
jt.url = plist.SystemUrl;
jt.attributes = CreateUrl(TreeList, jt);
jt.menus = CreateChildTree(TreeList, jt);
rootNode.Add(jt);
}
return rootNode;
}
/// <summary>
/// 递归生成子树
/// </summary>
/// <param name="TreeList"></param>
/// <param name="jt"></param>
/// <returns></returns>
private List<MenuModels> CreateChildTree(List<Cent_Tree> TreeList, MenuModels jt)
{
int keyid = jt.id;//根节点ID
List<MenuModels> nodeList = new List<MenuModels>();
var children = TreeList.Where(t => t.ParentID == keyid);
foreach (var chl in children)
{
MenuModels node = new MenuModels();
node.id = chl.ID;
node.text = chl.Name;
node.parentid = chl.ParentID;
node.icon = "";
node.url = chl.SystemUrl;
node.attributes = CreateUrl(TreeList, node);
node.menus = CreateChildTree(TreeList, node);
nodeList.Add(node);
}
return nodeList;
}
/// <summary>
/// 把Url属性添加到attribute中,如果需要别的属性,也可以在这里添加
/// </summary>
/// <param name="TreeList"></param>
/// <param name="jt"></param>
/// <returns></returns>
private Dictionary<string, string> CreateUrl(List<Cent_Tree> TreeList, MenuModels jt)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
int keyid = jt.id;
var urlList = TreeList.Where(t => t.ID == keyid).SingleOrDefault();
string Sysurl = urlList.SystemUrl;
string Indexurl = urlList.IndexUrl;
dic.Add("sysurl", Sysurl);
dic.Add("indurl", Indexurl);
dic.Add("close", "true");
return dic;
}

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

asp.net mvc+EF 递归生成树结构返回json的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建  ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列  (开篇)   (1):框架搭建    ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ( ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2): ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ( ...

随机推荐

  1. 由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

    背景   我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的 ...

  2. win7 清理系统

    1. 先用CCleaner等第三方软件清理一下.2. 将用户文件.我的文档.我的音乐.我的视频.桌面等路径更改到非系统分区(文件也会一并移动过去)3. 将系统盘的系统还原占用空间比减小,将大部分虚拟内 ...

  3. 彻底解决Unknown ASTNode child: LambdaExpression 错误

    错误原因:        在于 androidStudio lint检查的时候 会把Lamda表达式 认为是错误的.解决办法:    1.打开项目中中的lint.xml改为如下格式: <?xml ...

  4. HDOJ 1287 破译密码(异或运算)

    Problem Description 有个叫"猪头帮"的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符:现在还知道他们加密的方法是:只用一个大写字 ...

  5. HDU_1071——积分求面积,抛物线顶点公式

    Problem Description Ignatius bought a land last week, but he didn't know the area of the land becaus ...

  6. Java WeakHashMap 源码解析

    前面把基于特定数据结构的Map介绍完了,它们分别利用了相应数据结构的特点来实现特殊的目的,像HashMap利用哈希表的快速插入.查找实现O(1)的增删改查,TreeMap则利用了红黑树来保证key的有 ...

  7. 四种方法解析JSON数据

    (1)使用TouchJSon解析方法:(需导入包:#import "TouchJson/JSON/CJSONDeserializer.h") //使用TouchJson来解析北京的 ...

  8. View inflate方法和LayoutInflater inflate方法的区别详解

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/6257510.html 我们在Android开发中,对于将布局填充成View对象,最常用的两种办法 ...

  9. STL之hash_set和hash_map

    Contents 1 hash_set和hash_map的创建与遍历 2 hash_set和hash_map的查找 3 建议 一句话hash_set和hash_map:它们皆由Hashtable(St ...

  10. 使用truncate命令清空当前用户所有表的所有数据

    --批量清空当前用户所有表的所有数据 declarev_sql varchar2(2000) ;CURSOR cur is select table_name from user_tables ord ...