asp.net mvc+EF 递归生成树结构返回json
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的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ( ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2): ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ( ...
随机推荐
- Hadoop InputFormat
Hadoop可以处理不同数据格式(数据源)的数据,从文本文件到(非)关系型数据库,这很大程度上得益于Hadoop InputFormat的可扩展性设计,InputFormat层次结构图如下:
- HDFS基础和java api操作
1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS ...
- [Java] JavaMail 查询邮件
上两篇提到如何发送邮件:JavaMail 发送 html 格式.带附件的邮件, JavaMail 简单案例.本文再演示下,如何读取邮箱上的邮件. 邮件内容的数据格式种类比较多,用户直接阅读邮件比较常见 ...
- Selenium webdirver 操作浏览器
打开浏览器 HtmlUnit Driver 优点:不会实际打开浏览器,运行速度很快. 缺点:对JavaScript的支持不够好,有时会捕获不到页面元素. 使用:WebDriver driver=new ...
- 通过xslt把xml转换成html
将内容与内容的表现分离,软件界自从成为一个行业以来一直在追求的目标. xml+xslt是典型的数据与表现分离的设计方式.当然,你可以直接转换成HTML,但是如果你要进行整体变化的时候,XML+XSLT ...
- 共享一个防止脚本重复启动的shell脚本
项目的一个需求:为防止脚本重复调度,导致同时运行时相互冲突,需要在脚本运行开始前创建一个文件,结束时删除. 脚本启动时判断一下文件是否存在,如果存在则退出. 最开始这样做没发现问题,但跑一段时间后,发 ...
- 定时执行程序-Quartz简单实例
1.加jar包:Quartz自己quartz-1.8.3.jar和依赖包commons-logging.jar .slf4j-log4j12-1.5.10.jar .slf4j-api-1.5.10 ...
- ZAB协议(转)
转自:http://www.cnblogs.com/sunddenly/articles/4073157.html Zab协议 一.ZooKeeper概述 ZooKeeper内部有一个in-mem ...
- CAD INSTALL PROBLEMS
Windows8操作系统,没有重装系统前安装Autodesk软件是完全没有问题的 把电脑还原系统后再安装Autodesk软件提示缺少LiteHtml.dll文件了 兼容性改为XP3,然后点管理员身份运 ...
- 0x05: post 守护进程(deamon) json 任务调度
python 签名 post #coding:utf-8 import urllib,urllib2 url='http://wtf.thinkphp.com/index.php?m=&c=t ...