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. Oracle dblink 使用详解

    1.dblink简介 dblink(Database Link)数据库链接就是数据库的链接,跨本地数据库 2.使用语法详解 基本语法 CREATE [SHARED][PUBLIC] database ...

  2. iOS7初体验(1)——第一个应用程序HelloWorld

    iOS7 Beta已经发布了,迫不及待地下载了iOS 7及Xcode 5并体验了一下.先做一个简单的Hello World看看都有哪些变化吧. 1. 启动Xcode5-DP: 2. 从菜单选择File ...

  3. iOS、mac开源项目及库汇总

    原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499    iOS每日一记------------之 中级完美大整理 iOS.m ...

  4. JavaScript_变量的自动转换和语句

    JS自动类型转换 var a = 1; var b = true; "==" 表示 可以自动类型转换,比较的是数值 "===" 表示可以自动类型转换,先比较数值 ...

  5. KTV2

    自制KTV点歌系统经验 重唱与切歌 1.重唱 这个简单,会了播放,就会了这个; 我们用的数组下标来确定播放歌曲,自然如果下标没变的话,那播放的就还是这首了.所以只要确定了要执行的命令是重唱就行了. 那 ...

  6. 【POJ1733】【带标记并查集】Parity game

    Description Now and then you play the following game with your friend. Your friend writes down a seq ...

  7. BeanUtils的日期问题

    //注册日期类型转换器 //第一种  自定义方法            ConvertUtils.register(new Converter(){                //第一个参数是目标 ...

  8. UILongPressGestureRecognizer的selector多次调用解决方法

    当你使用longPress gesture recognizer 时,你可能会发现调用了多次. UILongPressGestureRecognizer *longPress = [[UILongPr ...

  9. 『重构--改善既有代码的设计』读书笔记----Hide Delegate

    所谓委托关系,就是一个类对于另一个类来说纯粹作为接口转发,即客户通过一个委托类去调用另一个对象.直白的委托关系就是委托类直接返回出目标类给客户调用,这个关系很麻烦,因为委托关系的变动就会影响客户端的代 ...

  10. JS设置Cookie,及COOKIE的限制

    在Javascript脚本里,一个cookie 实际就是一个字符串属性.当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值.每个cookie除了 name ...