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. SQL server 分离数据库与删除数据库的区别

    今天,在sql server 中,分离数据库,然后就问了一下,与删除数据库的区别 区别在于(百度一下): 分离后,.mdb和.log文件都在,以后你需要用的时候,还可以用附加数据库的方法加上去,分离数 ...

  2. E - Minimum Cost - POJ 2516(最小费)

    题目大意:N个客户,M个供货商,K种商品,现在知道每个客户对每种商品的需求量,也知道每个供货商每种商品的持有量,和供货商把一种商品运送到每个客户的单位花费.现在想知道如果能满足所有客户的最小花费是多少 ...

  3. UVALive 6198 A Terribly Grimm Problem

    题目大意是 给出L,H      10^10范围 为[L, H]这个连续的整数区间寻找一个序列. 序列的长度要跟[L, H]一样 然后序列中的数都是素数,并且互不相同 并且序列中第i个数 要求是L + ...

  4. spring mvc model.addAttribute页面c:forEach取不到

    昨天和今天都在解决一个问题,即: @RequestMapping(value = "/listAccounts", method = RequestMethod.GET) publ ...

  5. Windows Live Writer Install Faied

    win7安装Windows Live Writer软件时失败,并且提示错误代码0x80190194的问题 Windows Live Writer是一个很好的博客写作工具,单机就可以使用了,还可以用于同 ...

  6. FZU-竞技游戏

    Description John和Smith在玩一种竞技游戏.在游戏中,John给Smith由n个正整数组成的序列以及m条操作指令,需要Smith按照指令来对n个整数进行操作.其中每条指令都包括二个整 ...

  7. Jquery 的bind(), live(), delegate(), on()绑定事件方式

    1. 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅. bind() 适 ...

  8. ASP.NET MVC框架开发系列课程 (webcast视频下载)

    课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...

  9. 通知中心 NSNotificationCenter

    NSNotificationCenter 通知中心提供了一种在程序内广播信息的途径,一个NSNotificationCenter对象本质上是一个通知分发表(notification dispatch ...

  10. RHEL7和RHEL6的主要变化

    RHEL7和RHEL6的主要变化   RHEL7 RHEL6 文件系统 XFS EXT4 内核版本 3.10.x-x系列 2.6.x-x系列 内核名称 Maipo Santiago 发布时间 2014 ...