实例部分:
首先是为ZTree提供的数据规范,定义一个标准的接口,这样对于前台调用是清楚的,简单的,因为它返回的JSON数据将与ZTree默认的数据元素保持一致
////// ZTree数据结构 /// public interface IZTree { ////// 节点ID /// /// 节点名称 /// string name { get; set; } ////// 父ID /// int pId { get; set; } ////// 是否有子节点 /// bool isParent { get; set; } } public class Node : IZTree { #region IZTree 成员 ////// 节点ID /// public int id { get; set; } ////// 节点名称 /// public string name { get; set; } ////// 父ID /// public int pId { get; set; } ////// 是否有子节点 /// public bool isParent { get; set; } #endregion }
其次是MVC这边,会前台页面提供一个GET请求的方法,用来根据父ID,得到它的一级子节点列表
////// 得到指定ID的子节点列表,并序列化为JSON串 /// /// ///public string AsyncGetNodes(int? id) { return nodearr.Where(i => i.pId == (id ?? 0)).ToJson(); }
下面是JSON的功能类,网上有很多
public static class JsonHelper { ////// 返回对象序列化 /// /// 源对象 ///json数据 public static string ToJson(this object obj) { JavaScriptSerializer serialize = new JavaScriptSerializer(); return serialize.Serialize(obj); } ////// 控制深度 /// /// 源对象 /// 深度 ///json数据 public static string ToJson(this object obj, int recursionDepth) { JavaScriptSerializer serialize = new JavaScriptSerializer(); serialize.RecursionLimit = recursionDepth; return serialize.Serialize(obj); } public static object ParseFromJson(string szJson) { T obj = Activator.CreateInstance (); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms); } } }
OK,现在我们回到前台,看一下前台页面是如何与后台方法进行通讯的
下面是HTML代码
好了,我们运行程序,效果就出来了,呵呵!
经读者提意,放了一个效果图: