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. oracle number 和sqlserver numeric的区别

    number如果不指定范围默认是可以输入所有位数的小数,numeric如果不指定小数默认是不允许输入小数

  2. Word Ladder——LeetCode

    Given two words (start and end), and a dictionary, find the length of shortest transformation sequen ...

  3. LeetCode——Remove Duplicates from Sorted Array

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  4. js编写验证码

    这是一个简单的js编写的验证码,自己已经亲自验证,没有问题了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  5. KVM几种缓存模式

    原文在这里: http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaat%2Fliaatbpkvmguestca ...

  6. SVN和Maven及Jenkins(转)

    目前项目组在开发一个项目,由多个子模块构成,构建工具是maven,版本控制工具是svn.本文想对如何结合使用maven和svn提出一点初步的想法 一.只有svn的情况 首先考虑没有maven的情况.这 ...

  7. motan源码分析三:与spring框架的结合

    在本文第一章,分析的demo中使用了代码加载的方式加载了相关的类,但在我们的实际工作中,使用spring来加载相关的类的情况会更多,本文将分析一下motan是如何与spring一起协同工作的,主要的原 ...

  8. python常用的一些东西——sys、os等

    1.常用内置函数:(不用import就可以直接使用)      help(obj) 在线帮助, obj可是任何类型     callable(obj) 查看一个obj是不是可以像函数一样调用     ...

  9. hash表的创建

    功能:创建一个hash table.假设有处理冲突,则採用再散列法放置该元素 代码參考<零基础学数据结构> 代码例如以下: root@ubuntu:/mnt/shared/appbox/h ...

  10. [Angular 2] Router basic and Router Params

    When we define router in Angualr 2, we use @RouteConcfig() When we want to display component, we use ...