阐述返回JSON数据的使用说明介绍

开发
最近一直在研究ExtJS,准备用ExtJS做项目的时候郁闷了,网上搜索了半天和官方demo也没有发现如何结合ASP.NET做服务器端来现实返回JSON数据前台分页的相关资料和代码。

因项目需要,在苦痛挣扎了一天后,做出了一个返回JSON数据。先放在网上,***大家看下有什么地方需要优化没有,第二是避免其他ASP.NET程序员为网上苦苦搜索而找不到相关代码而郁闷。

***步:为了使服务器端查询返回JSON数据,从网上找了个用C#写的JSONHelper类(在此感谢那位不知名的好人),以下是JsonHelper类全部代码。(JsonHelper.cs)

  1. using System;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using System.Text;  
  5. using System.Web.Script.Serialization;  
  6. /// <summary> 
  7. /// JSONHelper 的摘要说明  
  8. /// </summary> 
  9. public class JSONHelper  
  10. {  
  11.     //对应JSON的singleInfo成员  
  12.     public string singleInfo = string.Empty;  
  13.     protected string _error = string.Empty;  
  14.     protected bool _success = true;  
  15.     protected long _totalCount = 0;  
  16.     protected System.Collections.ArrayList arrData = new ArrayList();  
  17.     protected System.Collections.ArrayList arrDataItem = new ArrayList();  
  18.     public JSONHelper()  
  19.     {  
  20.     }  
  21.     public static string ToJSON(object obj)  
  22.     {  
  23.         JavaScriptSerializer serializer = new JavaScriptSerializer();  
  24.         return serializer.Serialize(obj);  
  25.     }  
  26.     public static string ToJSON(object obj, int recursionDepth)  
  27.     {  
  28.         JavaScriptSerializer serializer = new JavaScriptSerializer();  
  29.         serializer.RecursionLimit = recursionDepth;  
  30.         return serializer.Serialize(obj);  
  31.     }  
  32.     //对应于JSON的success成员  
  33.     public bool success  
  34.     {  
  35.         get  
  36.         {  
  37.             return _success;  
  38.         }  
  39.         set  
  40.         {  
  41.             //如设置为true则清空error  
  42.             if (success) _error = string.Empty;  
  43.             _success = value;  
  44.         }  
  45.     }  
  46.     //对应于JSON的error成员  
  47.     public string error  
  48.     {  
  49.         get  
  50.         {  
  51.             return _error;  
  52.         }  
  53.         set  
  54.         {  
  55.             //如设置error,则自动设置success为false  
  56.             if (value != "") _success = false;  
  57.             _error = value;  
  58.         }  
  59.     }  
  60.     public long totlalCount  
  61.     {  
  62.         get { return _totalCount; }  
  63.         set { _totalCount = value; }  
  64.     }  
  65.     //重置,每次新生成一个json对象时必须执行该方法  
  66.     public void Reset()  
  67.     {  
  68.         _success = true;  
  69.         _error = string.Empty;  
  70.         singleInfo = string.Empty;  
  71.         arrData.Clear();  
  72.         arrDataItem.Clear();  
  73.     }  
  74.     public void AddItem(string name, string value)  
  75.     {  
  76.         arrData.Add("\"" + name + "\":" + "\"" + value + "\"");  
  77.     }  
  78.     public void ItemOk()  
  79.     {  
  80.         arrData.Add("<BR>");  
  81.     }  
  82.     //序列化JSON对象,得到返回的JSON代码  
  83.     public override string ToString()  
  84.     {  
  85.         StringBuilder sb = new StringBuilder();  
  86.         sb.Append("{");  
  87.         sb.Append("totalCount:" + totlalCount.ToString() + ",");  
  88.         sb.Append("success:" + _success.ToString().ToLower() + ",");  
  89.         sb.Append("error:\"" + _error.Replace("\"", "\\\"") + "\",");  
  90.         sb.Append("singleInfo:\"" + singleInfo.Replace("\"", "\\\"") + "\",");  
  91.         sb.Append("data:[");  
  92.         int index = 0;  
  93.         sb.Append("{");  
  94.         if (arrData.Count <= 0)  
  95.         {  
  96.             sb.Append("}]");  
  97.         }  
  98.         else  
  99.         {  
  100.             foreach (string val in arrData)  
  101.             {  
  102.                 index++;  
  103.                 if (val != "<BR>")  
  104.                 {  
  105.                     sb.Append(val + ",");  
  106.                 }  
  107.                 else  
  108.                 {  
  109.                     sbsb = sb.Replace(",", "", sb.Length - 1, 1);  
  110.                     sb.Append("},");  
  111.                     if (index < arrData.Count)  
  112.                     {  
  113.                         sb.Append("{");  
  114.                     }  
  115.                 }  
  116.             }  
  117.             sbsb = sb.Replace(",", "", sb.Length - 1, 1);  
  118.             sb.Append("]");  
  119.         }  
  120.         sb.Append("}");  
  121.         return sb.ToString();  
  122.     }  

第二步:新建ASPX文件,做为服务器端,用返回查询的JSON数据(PagingRequest.cs)

  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 System.Data;  
  8. using System.Data.SqlClient;  
  9. using System.Text;  
  10. namespace ExtJSDemo.Data  
  11. {  
  12.     public partial class PagingRequest : System.Web.UI.Page  
  13.     {  
  14.         protected void Page_Load(object sender, EventArgs e)  
  15.         {  
  16.             int start = Convert.ToInt32(Request["start"].ToString());   // ExtJS Paging 必须指定的参数(从第几行记录开始)/ ExtJS默认0是***行记录  
  17.             int limit = Convert.ToInt32(Request["limit"].ToString()); // ExtJS Paging 必须指定的参数(每页显示多少行记录)  
  18.             JSONHelper jsonHelp = new JSONHelper();  
  19.             int TotalRecords = 0;   
  20.             DataSet DSet = GET_Product_Data(start, limit, out TotalRecords); // 获取数据  
  21.             jsonHelp.success = true;  
  22.             jsonHelp.totlalCount = TotalRecords;// 记录总数  
  23.             if (DSet != null)  
  24.             {  
  25.                 DataTable DTable = DSet.Tables[0];  
  26.                 for (int i = 0; i < DTable.Rows.Count; i++)  
  27.                 {  
  28.                     // 循环生成JSON代码  
  29.                     jsonHelp.AddItem("Id", DTable.Rows[i]["Id"].ToString());  
  30.                     jsonHelp.AddItem("Name", DTable.Rows[i]["Name"].ToString());  
  31.                     jsonHelp.AddItem("StreetPrice", DTable.Rows[i]["StreetPrice"].ToString());  
  32.                     jsonHelp.AddItem("TypeName", DTable.Rows[i]["TypeName"].ToString());  
  33.                     jsonHelp.ItemOk();  
  34.                 }  
  35.             }  
  36.             Response.Write(jsonHelp.ToString());  // 输出JSON代码  
  37.         }  
  38.         /// <summary> 
  39.         /// 获取数据  
  40.         /// </summary> 
  41.         /// <param name="PageIndex">记录索引</param> 
  42.         /// <param name="PageSize">每页显示记录数</param> 
  43.         /// <param name="TotalRecords">总记录数</param> 
  44.         public DataSet GET_Product_Data(int start, int limit,out int TotalRecords)  
  45.         {  
  46.             SqlConnection _Connection = null;  
  47.             SqlDataAdapter _Adapter = null;  
  48.             DataSet DSet = null;  
  49.             try  
  50.             {  
  51.                 _Connection = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["SQLContionString"].ToString());  
  52.                 _Connection.Open();  
  53.                 _Adapter = new SqlDataAdapter("SELECT [Id] FROM [Product] ",_Connection);  
  54.                 DSet = new DataSet();  
  55.                 _Adapter.Fill(DSet);  
  56.                 TotalRecords = Convert.ToInt32(DSet.Tables[0].Rows.Count);      // 记录总数  
  57.                 if (TotalRecords < 1) return null;  // 没有记录  
  58.                 int pageLowerBound = start+1;                                            // 从第几条数据开始  
  59.                 int pageUpperBound = pageLowerBound + limit;             // 每页多少条数据  
  60.                 StringBuilder sb = new StringBuilder();  
  61.                 if (TotalRecords >= pageLowerBound)  
  62.                 {  
  63.                     for (int i = pageLowerBound; i < TotalRecords && i < pageUpperBound; i++)  
  64.                     {  
  65.                         sb.AppendFormat("'{0}',", DSet.Tables[0].Rows[i-1][0].ToString());//构造ID in() 条件,取其中一页  
  66.                     }  
  67.                 }  
  68.                 else   
  69.                     return null; // 没有记录  
  70.                 if (sb.Length > 1)  
  71.                     sb.Remove(sb.Length - 1, 1);//删除***一个逗号  
  72.                 StringBuilder strSql = new StringBuilder();  
  73.                 strSql.Append("SELECT a.[Id],a.[Name],a.[StreetPrice],b.TypeName  ");  
  74.                 strSql.Append(" FROM [Product] as a left join ProductType  as b on a.Typeid = b.Typeid ");  
  75.                 strSql.AppendFormat(" where a.[Id] in({0})", sb.ToString());  
  76.                 _Adapter = new SqlDataAdapter(strSql.ToString(), _Connection);  
  77.                 DSet = new DataSet();  
  78.                 _Adapter.Fill(DSet);  
  79.             }  
  80.             finally  
  81.             {  
  82.                 if (_Connection != null && _Connection.State == ConnectionState.Open)  
  83.                 {  
  84.                     _Connection.Close();  
  85.                 }  
  86.             }  
  87.             return DSet;  
  88.         }  
  89.     }  
  90. }  

 第三步:返回JSON数据页面用作客户端呈现结果的载体(PagingControls.aspx)

  1. <head id="Head1" runat="server"> 
  2.     <title></title> 
  3.         <link rel="stylesheet" type="text/css" href="../ext3/resources/css/ext-all.css" mce_href="ext3/resources/css/ext-all.css" /> 
  4.     <mce:script type="text/javascript" src="../ext3/adapter/ext/ext-base.js" mce_src="ext3/adapter/ext/ext-base.js"></mce:script> 
  5.     <mce:script type="text/javascript" src="../ext3/ext-all.js" mce_src="ext3/ext-all.js"></mce:script> 
  6.     <mce:script type="text/javascript" src="JS/PagingGridPanel.js" mce_src="JS/PagingGridPanel.js"></mce:script> 
  7.         <mce:script type="text/javascript"><!--  
  8.             Ext.BLANK_IMAGE_URL = "../ext3/resources/images/default/s.gif";  
  9.             Ext.onReady(function() {  
  10.                 Ext.QuickTips.init();  
  11.                 Ext.form.Field.prototype.msgTarget = "side";  
  12.                 new PagingGridPanel();      // JS文件  
  13.             });  
  14.       
  15. // --></mce:script> 

第四部:当然是写JS脚本啦!!而且肯定使用返回JSON数据

好了,出结果了,大功告成~~~~~~~~~~~~~``

责任编辑:chenqingxiang 来源: IT168
相关推荐

2010-01-07 18:19:01

JSON异步

2009-12-10 17:11:14

.NET Framew

2010-01-05 17:35:09

JSON数组格式

2010-01-07 15:36:22

JSON转化

2009-12-22 10:43:48

ADO.NET类库

2009-12-29 14:28:58

ADO数据

2010-01-05 16:33:35

使用JSON

2010-05-27 14:02:04

SVN使用说明

2010-02-03 17:37:30

Python语法

2010-01-13 09:48:34

Boost库

2009-12-31 09:42:41

ADO对象模型

2010-01-06 10:27:32

JSON数组

2010-01-07 17:48:02

JSON结构

2010-01-07 17:58:49

JSON数值

2010-01-06 17:06:05

Json格式

2010-01-05 15:48:51

JQuery缓存

2009-12-18 15:11:50

ADO.NET类

2010-01-07 09:31:27

Json数据异常

2010-06-03 13:49:04

Sendmail 配置

2010-01-06 16:53:57

JS两种语法
点赞
收藏

51CTO技术栈公众号