实例部分:

首先是为ZTree提供的数据规范,定义一个标准的接口,这样对于前台调用是清楚的,简单的,因为它返回的JSON数据将与ZTree默认的数据元素保持一致

    /// <summary>
/// ZTree数据结构
/// </summary>
public interface IZTree
{
/// <summary>
/// 节点ID
/// </summar
int id { get; set; }
/// <summary>
/// 节点名称
/// </summary>
string name { get; set; }
/// <summary>
/// 父ID
/// </summary>
int pId { get; set; }
/// <summary>
/// 是否有子节点
/// </summary>
bool isParent { get; set; }
}
public class Node : IZTree
{
#region IZTree 成员
/// <summary>
/// 节点ID
/// </summary>
public int id { get; set; }
/// <summary>
/// 节点名称
/// </summary>
public string name { get; set; }
/// <summary>
/// 父ID
/// </summary>
public int pId { get; set; }
/// <summary>
/// 是否有子节点
/// </summary>
public bool isParent { get; set; } #endregion
}

其次是MVC这边,会前台页面提供一个GET请求的方法,用来根据父ID,得到它的一级子节点列表

        /// <summary>
/// 得到指定ID的子节点列表,并序列化为JSON串
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string AsyncGetNodes(int? id)
{
return nodearr.Where(i => i.pId == (id ?? 0)).ToJson();
}

下面是JSON的功能类,网上有很多

    public static class JsonHelper
{
/// <summary>
/// 返回对象序列化
/// </summary>
/// <param name="obj">源对象</param>
/// <returns>json数据</returns>
public static string ToJson(this object obj)
{
JavaScriptSerializer serialize = new JavaScriptSerializer();
return serialize.Serialize(obj);
} /// <summary>
/// 控制深度
/// </summary>
/// <param name="obj">源对象</param>
/// <param name="recursionDepth">深度</param>
/// <returns>json数据</returns>
public static string ToJson(this object obj, int recursionDepth)
{
JavaScriptSerializer serialize = new JavaScriptSerializer();
serialize.RecursionLimit = recursionDepth;
return serialize.Serialize(obj);
} public static object ParseFromJson<T>(string szJson)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}

OK,现在我们回到前台,看一下前台页面是如何与后台方法进行通讯的

<link href="../../Scripts/JQuery-zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<script src="../../Scripts/JQuery-zTree/js/jquery-1.4.4.min.js"></script>
<script src="../../Scripts/JQuery-zTree/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript">
//异步加载节点
var setting4 = {
data: {
simpleData: {
enable: true,
idKey: "id",
pIdKey: "pId",
rootPId: 0
}
},
async: {
//异步加载
enable: true,
url: "/category/AsyncGetNodes",
autoParam: ["id", "name", "pId"]
},
callback: {
beforeExpand: beforeExpand,
onAsyncSuccess: onAsyncSuccess,
onAsyncError: onAsyncError
}
}; function createTree() {
$.ajax({
url: '/category/AsyncGetNodes', //url action是方法的名称
data: { id: 0 },
type: 'Get',
dataType: "text", //可以是text,如果用text,返回的结果为字符串;如果需要json格式的,可是设置为json
success: function (data) {
$.fn.zTree.init($("#treeDemo4"), setting4, eval('(' + data + ')'));
},
error: function (msg) {
alert(" 数据加载失败!" + msg);
}
});
} function beforeExpand(treeId, treeNode) {
if (!treeNode.isAjaxing) {
return true;
} else {
alert("zTree 正在下载数据中,请稍后展开节点。。。");
return false;
}
} function onAsyncSuccess(event, treeId, treeNode, msg) { }
function onAsyncError() {
alert(" 数据加载失败");
} $(document).ready(function () {
createTree();
});
</script>

下面是HTML代码

  <ul id="treeDemo4" class="ztree"></ul>

好了,我们运行程序,效果就出来了,呵呵!

经读者提意,放了一个效果图:

最新文章

  1. sql笔记-group by 统计功能
  2. android 第三方 图表
  3. Laravel-5.1 ---- 将mews captcha整合到项目中!
  4. C#基础总结之六 DataTable (临时表/数据源) 和Datatable 名片练习
  5. hiho_1062_最近公共祖先
  6. session 和 cookie 的区别和联系
  7. Android Learning:微信第三方登录
  8. Asm Shader Reference --- Shader Model 2.0 part
  9. mysql存储过程中in、out、inout参数使用实际案例
  10. BZOJ.2565.[国家集训队]最长双回文串(Manacher/回文树)
  11. Effective C++ 笔记:条款 32 确定你的public继承塑造出正确的is-a关系
  12. Linux软件包的安装(rpm+yum)
  13. 尚硅谷springboot学习6-eclipse创建springboot项目的三种方法(转)
  14. SQL关闭自增长列标识:SET IDENTITY_INSERT
  15. 【转】在64位windows下使用instsrv.exe和srvany.exe创建windows服务
  16. python类和模块区别,python命名空间
  17. Android -- 触摸Area对焦区域(更新)
  18. c# 对数据库的操作
  19. Thinkphp学习笔记6-redirect 页面重定向
  20. 关于cgi、FastCGI、php-fpm、php-cgi(复制)

热门文章

  1. 在single模式修改密码
  2. float 和 clear
  3. Java:获取IP地址
  4. Python中的函数(2)
  5. openstack创建虚拟机之后使用ssh登陆的解决办法
  6. c# 类如何生成dll文件及引用
  7. POJ 2420 A Star not a Tree?【爬山法】
  8. bzoj 2463 [中山市选2009]谁能赢呢? 博弈
  9. T1365 浴火银河星际跳跃 codevs
  10. 2017多校Round4(hdu6067~hdu6079)