打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ASP.NET JS+Sql无限级树型菜单

功能说明:

        由Tree.html中的JQuery AJAX代码发起HTTP请求到GetTreeData.aspx获取JSON格式的字符串,然后在Tree.html中将字符串格式化为JSON格式,用dTree函数递归构造JS Tree。

步骤:

       1)创建Menu类(为了构造List<T>泛型集合)

       2)创建FormatToJson类

       3)创建GetTreeData.aspx窗体,添加后台实现代码

       4)创建Tree.html,并处理数据递归绑定Tree 

 1、Tree.html

  1. <!--Tree.html-->  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  3. <html xmlns="http://www.w3.org/1999/xhtml">  
  4. <head>  
  5.     <title></title>  
  6.     <mce:script type="text/javascript" src="Scripts/dtree.js" mce_src="Scripts/dtree.js"></mce:script>  
  7.     <mce:script type="text/javascript" src="Scripts/jquery-1.4.1.js" mce_src="Scripts/jquery-1.4.1.js"></mce:script>  
  8.     <mce:script type="text/javascript"><!--  
  9.         d = new dTree('d');  
  10.         d.add(0, -1, '模块列表');  
  11.         function getData(id) {  
  12.             $.ajax({  
  13.                 url: 'TreeSource/GetTreeData.aspx?parentID=' + id,  
  14.                 type: 'post',  
  15.                 datatype: 'json',  
  16.                 success: function (returnJsonValue) {  
  17.                     if (returnJsonValue.length > 0) {  
  18.                         //格式化为JSON数据格式  
  19.                         var json = eval("(" + returnJsonValue + ")");  
  20.                         //document.write(json.Menu[0].MenuName);  
  21.                         //遍历集合,添加树节点  
  22.                         $.each(json.Menu, function (key, value) {  
  23.                             if (id == 0) {  
  24.                                 d.add(value.ID, value.ParentMenuID, value.MenuName, value.MenuClickURL, value.MenuName, 'mainFrame', 'images/Tree/folder.gif', 'images/Tree/folderopen.gif');  
  25.                             }  
  26.                             else {  
  27.                                 d.add(value.ID, value.ParentMenuID, value.MenuName, value.MenuClickURL, value.MenuName, 'mainFrame');  
  28.                             }  
  29.                             //根据模块的ParentID递归绑定数据  
  30.                             getData(value.ID);  
  31.                         })  
  32.                     }  
  33.                     else {  
  34.                         $("#divTree").html(d.toString());  
  35.                         //数据请求完毕,隐藏图片  
  36.                         $("#imgLoading").hide();  
  37.                     }  
  38.                 }  
  39.             })  
  40.         }  
  41.         $(getData(0));  
  42.       
  43. // --></mce:script>    
  44.     <mce:style type="text/css"><!--  
  45.         img  
  46.         {  
  47.             border:0px;  
  48.         }  
  49.       
  50. --></mce:style><style type="text/css" mce_bogus="1">        img  
  51.         {  
  52.             border:0px;  
  53.         }  
  54.     </style>  
  55. </head>  
  56. <body>  
  57.     <!--数据请求完成之前显示-->  
  58.     <img id="imgLoading" src="Images/Loading/loading01.gif" mce_src="Images/Loading/loading01.gif" alt="正在加载..." />  
  59.     <!--显示树形列表-->  
  60.     <div id="divTree">  
  61.     </div>  
  62. </body>  
  63. </html>  
 

2、请求数据的ASP.NET网页后台代码(前台清空就剩Page命令那一行就可以了)

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.UI;  
  6. using System.Web.UI.WebControls;  
  7. using DAO;  
  8. using System.Data;  
  9. using System.Text;  
  10. using System.Reflection;  
  11. public partial class TreeSource_GetTreeData : System.Web.UI.Page  
  12. {  
  13.     SqlHelper helper = new SqlHelper();  
  14.     protected void Page_Load(object sender, EventArgs e)  
  15.     {  
  16.         if (!IsPostBack)  
  17.         {  
  18.             this.GetMenuByParentID();  
  19.         }  
  20.     }  
  21.     private void GetMenuByParentID()  
  22.     {  
  23.         if (ParentID != null)  
  24.         {  
  25.             DataTable dt = helper.FillDataTable(String.Format(  
  26.                 "SELECT * FROM SunZonTMSMenu WHERE ParentMenuID={0} AND IsOpen=1", ParentID.ToString()  
  27.                 ));  
  28.             IList<Menu> menu = new List<Menu>();  
  29.             if (dt != null && dt.Rows.Count > 0)  
  30.             {  
  31.                 foreach (DataRow dr in dt.Rows)  
  32.                 {  
  33.                     menu.Add(new Menu() {   
  34.                     ID=Int32.Parse(dr["ID"].ToString()),  
  35.                     ParentMenuID = Int32.Parse(dr["ParentMenuID"].ToString()),  
  36.                     MenuName = dr["MenuName"].ToString(),  
  37.                     MenuCode = dr["MenuCode"].ToString(),  
  38.                     MenuClickURL = dr["MenuClickURL"].ToString()  
  39.                     });  
  40.                 }  
  41.             }  
  42.             if (menu.Count > 0)  
  43.             {  
  44.                 Response.Write(FormatToJson.ListToJson<Menu>(menu));  
  45.             }  
  46.         }  
  47.    
  48.     }  
  49.       
  50.     //上级Menu的ID   
  51.     private Int32? ParentID  
  52.     {  
  53.         get  
  54.         {  
  55.             try  
  56.             {  
  57.                 return Int32.Parse(Request.QueryString["parentID"]);  
  58.             }  
  59.             catch  
  60.             {  
  61.                 return null;  
  62.             }  
  63.         }  
  64.     }  
  65. }  
 

3、使用到的Menu实体类

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. /// <summary>   
  6. /// Summary description for Menu   
  7. /// </summary>   
  8. public class Menu  
  9. {  
  10.     public Menu()  
  11.     {  
  12.         //   
  13.         // TODO: Add constructor logic here   
  14.         //   
  15.     }  
  16.     public int ID { getset; }  
  17.     public int ParentMenuID { getset; }  
  18.     public string MenuName { getset; }  
  19.     public string MenuCode { getset; }  
  20.     public string MenuClickURL { getset; }  
  21. }  
 

4、使用的构造JSON数据格式的类(此类不是本人写的,来源于互联网)

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Text;  
  6. using System.Reflection;  
  7. using System.Collections;  
  8. using System.Data;  
  9. using System.Data.Common;  
  10. /// <summary>   
  11. /// Summary description for FormatToJson   
  12. /// </summary>   
  13. public class FormatToJson  
  14. {  
  15.     public FormatToJson()  
  16.     {  
  17.         //   
  18.         // TODO: Add constructor logic here   
  19.         //   
  20.     }  
  21.     /// <summary>     
  22.     /// List转成json      
  23.     /// </summary>     
  24.     /// <typeparam name="T"></typeparam>     
  25.     /// <param name="jsonName"></param>     
  26.     /// <param name="list"></param>     
  27.     /// <returns></returns>     
  28.     public static string ListToJson<T>(IList<T> list, string jsonName)  
  29.     {  
  30.         StringBuilder Json = new StringBuilder();  
  31.         if (string.IsNullOrEmpty(jsonName))  
  32.             jsonName = list[0].GetType().Name;  
  33.         Json.Append("{/"" + jsonName + "/":[");  
  34.         if (list.Count > 0)  
  35.         {  
  36.             for (int i = 0; i < list.Count; i++)  
  37.             {  
  38.                 T obj = Activator.CreateInstance<T>();  
  39.                 PropertyInfo[] pi = obj.GetType().GetProperties();  
  40.                 Json.Append("{");  
  41.                 for (int j = 0; j < pi.Length; j++)  
  42.                 {  
  43.                     Type type = pi[j].GetValue(list[i], null).GetType();  
  44.                     Json.Append("/"" + pi[j].Name.ToString() + "/":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));  
  45.                     if (j < pi.Length - 1)  
  46.                     {  
  47.                         Json.Append(",");  
  48.                     }  
  49.                 }  
  50.                 Json.Append("}");  
  51.                 if (i < list.Count - 1)  
  52.                 {  
  53.                     Json.Append(",");  
  54.                 }  
  55.             }  
  56.         }  
  57.         Json.Append("]}");  
  58.         return Json.ToString();  
  59.     }  
  60.     /// <summary>     
  61.     /// List转成json      
  62.     /// </summary>     
  63.     /// <typeparam name="T"></typeparam>     
  64.     /// <param name="list"></param>     
  65.     /// <returns></returns>     
  66.     public static string ListToJson<T>(IList<T> list)  
  67.     {  
  68.         object obj = list[0];  
  69.         return ListToJson<T>(list, obj.GetType().Name);  
  70.     }  
  71.     /// <summary>      
  72.     /// 对象转换为Json字符串      
  73.     /// </summary>      
  74.     /// <param name="jsonObject">对象</param>      
  75.     /// <returns>Json字符串</returns>      
  76.     public static string ToJson(object jsonObject)  
  77.     {  
  78.         string jsonString = "{";  
  79.         PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();  
  80.         for (int i = 0; i < propertyInfo.Length; i++)  
  81.         {  
  82.             object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);  
  83.             string value = string.Empty;  
  84.             if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)  
  85.             {  
  86.                 value = "'" + objectValue.ToString() + "'";  
  87.             }  
  88.             else if (objectValue is string)  
  89.             {  
  90.                 value = "'" + ToJson(objectValue.ToString()) + "'";  
  91.             }  
  92.             else if (objectValue is IEnumerable)  
  93.             {  
  94.                 value = ToJson((IEnumerable)objectValue);  
  95.             }  
  96.             else  
  97.             {  
  98.                 value = ToJson(objectValue.ToString());  
  99.             }  
  100.             jsonString += "/"" + ToJson(propertyInfo[i].Name) + "/":" + value + ",";  
  101.         }  
  102.         jsonString.Remove(jsonString.Length - 1, jsonString.Length);  
  103.         return jsonString + "}";  
  104.     }  
  105.     /// <summary>      
  106.     /// 对象集合转换Json      
  107.     /// </summary>      
  108.     /// <param name="array">集合对象</param>      
  109.     /// <returns>Json字符串</returns>      
  110.     public static string ToJson(IEnumerable array)  
  111.     {  
  112.         string jsonString = "[";  
  113.         foreach (object item in array)  
  114.         {  
  115.             jsonString += ToJson(item) + ",";  
  116.         }  
  117.         jsonString.Remove(jsonString.Length - 1, jsonString.Length);  
  118.         return jsonString + "]";  
  119.     }  
  120.     /// <summary>      
  121.     /// 普通集合转换Json      
  122.     /// </summary>      
  123.     /// <param name="array">集合对象</param>      
  124.     /// <returns>Json字符串</returns>      
  125.     public static string ToArrayString(IEnumerable array)  
  126.     {  
  127.         string jsonString = "[";  
  128.         foreach (object item in array)  
  129.         {  
  130.             jsonString = ToJson(item.ToString()) + ",";  
  131.         }  
  132.         jsonString.Remove(jsonString.Length - 1, jsonString.Length);  
  133.         return jsonString + "]";  
  134.     }  
  135.     /// <summary>      
  136.     /// Datatable转换为Json      
  137.     /// </summary>      
  138.     /// <param name="table">Datatable对象</param>      
  139.     /// <returns>Json字符串</returns>      
  140.     public static string ToJson(DataTable dt)  
  141.     {  
  142.         StringBuilder jsonString = new StringBuilder();  
  143.         jsonString.Append("[");  
  144.         DataRowCollection drc = dt.Rows;  
  145.         for (int i = 0; i < drc.Count; i++)  
  146.         {  
  147.             jsonString.Append("{");  
  148.             for (int j = 0; j < dt.Columns.Count; j++)  
  149.             {  
  150.                 string strKey = dt.Columns[j].ColumnName;  
  151.                 string strValue = drc[i][j].ToString();  
  152.                 Type type = dt.Columns[j].DataType;  
  153.                 jsonString.Append("/"" + strKey + "/":");  
  154.                 strValue = StringFormat(strValue, type);  
  155.                 if (j < dt.Columns.Count - 1)  
  156.                 {  
  157.                     jsonString.Append(strValue + ",");  
  158.                 }  
  159.                 else  
  160.                 {  
  161.                     jsonString.Append(strValue);  
  162.                 }  
  163.             }  
  164.             jsonString.Append("},");  
  165.         }  
  166.         jsonString.Remove(jsonString.Length - 1, 1);  
  167.         jsonString.Append("]");  
  168.         return jsonString.ToString();  
  169.     }  
  170.     /// <summary>     
  171.     /// DataTable转成Json      
  172.     /// </summary>     
  173.     /// <param name="jsonName"></param>     
  174.     /// <param name="dt"></param>     
  175.     /// <returns></returns>     
  176.     public static string ToJson(DataTable dt, string jsonName)  
  177.     {  
  178.         StringBuilder Json = new StringBuilder();  
  179.         if (string.IsNullOrEmpty(jsonName))  
  180.             jsonName = dt.TableName;  
  181.         Json.Append("{/"" + jsonName + "/":[");  
  182.         if (dt.Rows.Count > 0)  
  183.         {  
  184.             for (int i = 0; i < dt.Rows.Count; i++)  
  185.             {  
  186.                 Json.Append("{");  
  187.                 for (int j = 0; j < dt.Columns.Count; j++)  
  188.                 {  
  189.                     Type type = dt.Rows[i][j].GetType();  
  190.                     Json.Append("/"" + dt.Columns[j].ColumnName.ToString() + "/":" + StringFormat(dt.Rows[i][j].ToString(), type));  
  191.                     if (j < dt.Columns.Count - 1)  
  192.                     {  
  193.                         Json.Append(",");  
  194.                     }  
  195.                 }  
  196.                 Json.Append("}");  
  197.                 if (i < dt.Rows.Count - 1)  
  198.                 {  
  199.                     Json.Append(",");  
  200.                 }  
  201.             }  
  202.         }  
  203.         Json.Append("]}");  
  204.         return Json.ToString();  
  205.     }  
  206.     /// <summary>      
  207.     /// DataReader转换为Json      
  208.     /// </summary>      
  209.     /// <param name="dataReader">DataReader对象</param>      
  210.     /// <returns>Json字符串</returns>      
  211.     public static string ToJson(DbDataReader dataReader)  
  212.     {  
  213.         StringBuilder jsonString = new StringBuilder();  
  214.         jsonString.Append("[");  
  215.         while (dataReader.Read())  
  216.         {  
  217.             jsonString.Append("{");  
  218.             for (int i = 0; i < dataReader.FieldCount; i++)  
  219.             {  
  220.                 Type type = dataReader.GetFieldType(i);  
  221.                 string strKey = dataReader.GetName(i);  
  222.                 string strValue = dataReader[i].ToString();  
  223.                 jsonString.Append("/"" + strKey + "/":");  
  224.                 strValue = StringFormat(strValue, type);  
  225.                 if (i < dataReader.FieldCount - 1)  
  226.                 {  
  227.                     jsonString.Append(strValue + ",");  
  228.                 }  
  229.                 else  
  230.                 {  
  231.                     jsonString.Append(strValue);  
  232.                 }  
  233.             }  
  234.             jsonString.Append("},");  
  235.         }  
  236.         dataReader.Close();  
  237.         jsonString.Remove(jsonString.Length - 1, 1);  
  238.         jsonString.Append("]");  
  239.         return jsonString.ToString();  
  240.     }  
  241.     /// <summary>      
  242.     /// DataSet转换为Json      
  243.     /// </summary>      
  244.     /// <param name="dataSet">DataSet对象</param>      
  245.     /// <returns>Json字符串</returns>      
  246.     public static string ToJson(DataSet dataSet)  
  247.     {  
  248.         string jsonString = "{";  
  249.         foreach (DataTable table in dataSet.Tables)  
  250.         {  
  251.             jsonString += "/"" + table.TableName + "/":" + ToJson(table) + ",";  
  252.         }  
  253.         jsonString = jsonString.TrimEnd(',');  
  254.         return jsonString + "}";  
  255.     }  
  256.     /// <summary>     
  257.     /// 过滤特殊字符     
  258.     /// </summary>     
  259.     /// <param name="s"></param>     
  260.     /// <returns></returns>     
  261.     private static string String2Json(String s)  
  262.     {  
  263.         StringBuilder sb = new StringBuilder();  
  264.         for (int i = 0; i < s.Length; i++)  
  265.         {  
  266.             char c = s.ToCharArray()[i];  
  267.             switch (c)  
  268.             {  
  269.                 case '/"':  
  270.                     sb.Append("///""); break;  
  271.                 case '//':  
  272.                     sb.Append("////"); break;  
  273.                 case '/':  
  274.                     sb.Append("///"); break;  
  275.                 case '/b':  
  276.                     sb.Append("//b"); break;  
  277.                 case '/f':  
  278.                     sb.Append("//f"); break;  
  279.                 case '/n':  
  280.                     sb.Append("//n"); break;  
  281.                 case '/r':  
  282.                     sb.Append("//r"); break;  
  283.                 case '/t':  
  284.                     sb.Append("//t"); break;  
  285.                 default:  
  286.                     sb.Append(c); break;  
  287.             }  
  288.         }  
  289.         return sb.ToString();  
  290.     }  
  291.     /// <summary>     
  292.     /// 格式化字符型、日期型、布尔型     
  293.     /// </summary>     
  294.     /// <param name="str"></param>     
  295.     /// <param name="type"></param>     
  296.     /// <returns></returns>     
  297.     private static string StringFormat(string str, Type type)  
  298.     {  
  299.         if (type == typeof(string))  
  300.         {  
  301.             str = String2Json(str);  
  302.             str = "/"" + str + "/"";  
  303.         }  
  304.         else if (type == typeof(DateTime))  
  305.         {  
  306.             str = "/"" + str + "/"";  
  307.         }  
  308.         else if (type == typeof(bool))  
  309.         {  
  310.             str = str.ToLower();  
  311.         }  
  312.         return str;  
  313.     }  
  314. }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ASP.NET+JQuery+.Ashx实现+百度Echarts 实现动态柱状图数据图形报表的统计
C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。...
C#中读取json数据
公共的Json操作C#类
json和table互相转换
25个基于浏览器的HTML在线编辑器集合
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服