1,首先构造tree接受的格式化数据结构MODEL

/// <summary>

/// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递

/// </summary>

// [DataContract]

[Serializable]

public class EasyTreeData

{

/// <summary>

/// ID

/// </summary>

//  [DataMember]

public string id { get; set; }

/// <summary>

/// 节点名称

/// </summary>

// [DataMember]

public string text { get; set; }

/// <summary>

/// 是否展开

/// </summary>

//[DataMember]

public string state  { get; set; }

/// <summary>

/// 图标样式

/// </summary>

// [DataMember]

public string iconCls { get; set; }

/// <summary>

/// 子节点集合

/// </summary>

//  [DataMember]

public List<EasyTreeData> children { get; set; }

/// <summary>

/// 默认构造函数

/// </summary>

public EasyTreeData()

{

this.children = new List<EasyTreeData>();

this.state = "open";

}

/// <summary>

/// 常用构造函数

/// </summary>

public EasyTreeData(string id, string text, string iconCls = "", string state = "open")

: this()

{

this.id = id;

this.text = text;

this.state = state;

this.iconCls = iconCls;

}

/// <summary>

/// 常用构造函数

/// </summary>

public EasyTreeData(int id, string text, string iconCls = "", string state = "open", List<EasyTreeData> children=null )

: this()

{

this.id = id.ToString();

this.text = text;

this.state = state;

this.iconCls = iconCls;

this.children = children;

}

}

2,前台代码

2.1,前台代码html代码

<ul id="tt"></ul>

2.2,前台代码脚本

<script type="text/javascript">

$(function () {

$('#tt').tree({

checkbox: false,

url: '/Cultivate/GetUserTreeJson',

onClick: function (node) {

alert(node.id);

}

});

});

</script>

3,控制器(Cultivate)的方法GetUserTreeJson'

3.1,控制器(Cultivate)的方法GetUserTreeJson代码

[HttpPost]

public ActionResult GetUserTreeJson()

{

int PID = -1;

List<EasyTreeData> treeList = new List<EasyTreeData>();

if (PID == -1)

{

var list = (from p in db.cultivates

where p.NodePID == PID

orderby p.NodeID

select p).ToList();

foreach (cultivate info in list)

{ var child = (from p in db.cultivates

where p.NodePID == info.NodeID

orderby p.NodeID

select p).ToList();

if (child.Count ==0)

{

treeList.Add(new EasyTreeData(info.NodeID, info.NodeName, "icon-user"));

}

else

{

treeList.Add(new EasyTreeData(info.NodeID, info.NodeName, "icon-user","open", GetUserTreeJson2(info.NodeID)));

}

}

}

string json = ToJson(treeList);

return Content(json);

}

3.2,如果有N级菜单循环代码

private List<EasyTreeData> GetUserTreeJson2( int PID)

{

List<EasyTreeData> treeList = new List<EasyTreeData>();

var list = (from p in db.cultivates

where p.NodePID == PID

orderby p.NodeID

select p).ToList();

foreach (cultivate info in list)

{

var child = (from p in db.cultivates

where p.NodePID == info.NodeID

orderby p.NodeID

select p).ToList(); ;

if (child.Count == 0)

{

treeList.Add(new EasyTreeData(info.NodeID, info.NodeName, "icon-user"));

}

else

{

treeList.Add(new EasyTreeData(info.NodeID, info.NodeName, "icon-user", "closed", GetUserTreeJson2(info.NodeID)));

}

}

return treeList;

}

3.3,Json代码生成。

protected string ToJson(object obj)

{

string jsonData = (new JavaScriptSerializer()).Serialize(obj);

return jsonData;

}

MVC4中EasyUI Tree异步加载JSON数据生成树的更多相关文章

  1. spring mvc easyui tree 异步加载树

    使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...

  2. jquery easyui tree异步加载子节点

    easyui中的树可以从标记中建立,也可以通过指定一个URL属性读取数据建立.如果想建立一棵异步树,需要为每个节点指定一个id属性值,这样在加载数据时会自动向后台传递id参数. <ul id=& ...

  3. EasyUI datagrid动态加载json数据

    最近做一个项目,要求是两张张表可能查找出10多种不同的结果集. 如果想只用一个表格就把全部的结果不同的显示出来那么就肯定不同使用固定的字段名字,要通过动态加载后台返回来的数据把它显示出来就必须动态加载 ...

  4. 使用getJSON()方法异步加载JSON格式数据

    使用getJSON()方法异步加载JSON格式数据 使用getJSON()方法可以通过Ajax异步请求的方式,获取服务器中的数组,并对获取的数据进行解析,显示在页面中,它的调用格式为: jQuery. ...

  5. Android-LoaderManager异步加载数据库数据

    LoaderManager异步加载数据库数据,是在(Activity/fragment/其他UI等) 加载大量的本地Database库表数据,由于数据大在加载过程中会导致UI线程阻塞,导致用户体验不好 ...

  6. ztree插件的使用及列表项拖拽的实现(jQuery)+异步加载节点数据

    为了实现如图所示的树状结构图,并使列表项可拖动到盒子里,研究了ztree这个插件的使用,并仔细研究了列表项的拖动事件.完成了预期需求,对jQuery的运用得到了提高.这个插件的功能非常强大,除了基本的 ...

  7. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载

     在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一 ...

  8. Python爬虫爬取异步加载的数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:努力努力再努力 爬取qq音乐歌手数据接口数据 https://y.qq ...

  9. hive加载json数据解决方案

    hive官方并不支持json格式的数据加载,默认支持csv格式文件加载,如何在不依赖外部jar包的情况下实现json数据格式解析,本编博客着重介绍此问题解决方案 首先创建元数据表: create EX ...

随机推荐

  1. APNs改动 (转)

    对 APNs 的吐槽 APNs 是 Apple Push Notification service 的简称(注意 APNs 的大小写, s不需要大写). 以下是我收集的一些关于 APNs 的吐槽,你先 ...

  2. [转]mysql自动定时备份数据库的最佳方法-支持windows系统

    网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作. 我们都知道mssql本身就自带了计划任务可以用来自动备份,可是mysql咱们要怎么样自 ...

  3. js 中读取JSON的方法探讨

    方法一:函数构造定义法返回 var strJSON = "{name:'json name'}";  //得到的JSONvar obj = new Function("r ...

  4. Linux中的find指令

    find find是最常见和最强大的查找命令,在磁盘中查找文件,用它找到任何你想找的文件,就是速度有点慢. find    path    -option    [    -print ]    [ ...

  5. codeforces 165D.Beard Graph 解题报告

    题意: 给一棵树,树的每条边有一种颜色,黑色或白色,一开始所有边均为黑色,有两个操作: 操作1:将第i条边变成白色或将第i条边变成黑色. 操作2 :询问u,v两点之间仅经过黑色变的最短距离. 树链剖分 ...

  6. cmd 命令行下复制、粘贴的快捷键

    1.单击左下角“开始”菜单,选择“运行”,输入“cmd”. 2.在弹出的cmd窗口的标题栏上点击“右键”,选择“属性”. 3.在弹出的对话框中选择“选项”这个选项卡,在“编辑选项”区域中勾选“快速编辑 ...

  7. Vim及VimScript资料总结《转载》

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Vim教程 入门 Vim 实用技术 Learning the vi and Vim Editors A Byte of ...

  8. __attribute__ ((section(".text")))的测试

    一.测试原因 在学习u-boot的环境变量过程中,看到有如此的代码,现对涉及到的内容进行实验测试. 二.测试目的 1.了解gcc允许对段的属性进行更改的方法. 2.解决”ENV_IS_EMBEDDED ...

  9. MAC OSX使用篇

    前述: 从windows平台切换到osx平台,的确没能一下子适应过来,在使用过程当中遇到了很多问题. link1:osx卸载应用程序的四种方法 link2:(推荐看)开始使用Mac OS X——写给M ...

  10. Dao 处理

    1. 写一个基础的接口和类来做基本的操作 /** * */ package com.wolfgang.dao; import java.util.List; /** * @author Adminis ...