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. 【转】jquery两稳定版本比较~~

    博客分类: Web前端 jquery  jquery历经了多个版本的更新,版本上的比较貌似没什么必要性,一般来说新的版本会比旧的版本各方面都略有提升,但由于新版中增加了各种新的功能,难免会引起bug的 ...

  2. FlightGear 视角控制

    Flightgear提供了非常灵活的模块化功能 这里就简要记录一下视角切换功能 首先,需要了解一下Flightgear中的property tree的主要内容,这里暂略. http://wiki.fl ...

  3. SGU 112.a^b - b^a

    题意: 如标题. 方法: 简单高精度... 代码(继续JAVA 水过) import java.util.*; import java.math.*; public class Solution { ...

  4. 【实习记】2014-08-10(上)代码跟踪git的想法+归并排序的debug过程

        (冒泡,选择,插入,希尔,快速,归并,堆排)周末加班学习C++,打算用C++写七大经典排序代码.发现3个月前自己写的七大经典排序代码(C Language)突然运行出错. Makefile内容 ...

  5. C# RSA

    using System; using System.Security.Cryptography; using System.Text; class RSACSPSample { static voi ...

  6. jQuery--效果和遍历

    七.jQuery效果 (1)jQuery隐藏和显示 //隐藏 $("#hide").click(function(){ $("p").hide(1000); } ...

  7. C语言-01基础语法

    1)         总结常见文件的拓展名 .c 是C语言源文件,在编写代码的时候创建 .o 是目标文件,在编译成功的时候产生 .out 是可执行文件,在链接成功的时候产生 2)         总结 ...

  8. Ruby自学笔记(四)— 数组,Hash,正则表达式简介

    今天学习的是数组和Hash,数组在很多编程语言中都能常常用到. 数组: 数组是存储数据的一种容器,在Ruby中,数组中存储的数据可以是任何类型的数据:这和JAVA不同,在JAVA中,数组是存储同一类型 ...

  9. jquery的笔记

    1. 基本选择器 基本的  #id      .class     element(元素)     *(全部元素) $("#id")   $(".class") ...

  10. 【Java】理解 UDDI 注册中心的 WSDL

    如何发布和查找 WSDL 服务描述 Web 服务描述语言(WSDL)有多种用法.特别是,根据应用程序的需要,WSDL 在 UDDI 注册中心有好几种使用方法.在这第 1 篇文章中(本系列共三篇),我们 ...