本文假定读者有一定的Ext 控件的使用经验...
看过Ext - EditGridPanel实现效果的朋友会很惊讶,一个Grid就能实现所有增删改查功能。在展示给客户看时,让你的表现得很风骚。而他们又怎么知道,我们在调试js时,是多么痛苦。
如何在js中调用后台业务逻辑类,在我前面的文章中已经讲述过,而本篇的重点在于js对象与后台对象之间的转换。
1. Json Object转Model —— js定义json对象传递到后台业务类,后台接收后,转为数据模型。
Json Object = { 'KId':1, 'IndexDirectory':‘c:/root’}
转换方法:
KdgPointData kpd
=
(KdgPointData)JsonConvert.Import(
typeof
(KdgPointData), jsonObject.ToString());
KdgPointData就是数据模型类,使用JsonConvert对象需要引用两个动态链接库(地址见文章附录),并添加: using Jayrock.Json.Conversion;
Import()方法重载了5次,这里用到的是,第一个参数为你想转换的类型,第二个参数为json object转为string后的结果。
注意:在后台接收js对象,都用object来接收,也就是说,上面的jsonObject在c#方法类中,是一个object对象,转换后,才是model。而且jsonObject中元素的个数,key的大小写都要跟Model中的属性保持一直。
2. Model转Json Object —— 这个不需要转变,直接将Model或者Model[]作为方法的返回类型,在js那边接收后,定义对应的JsonReader,就可以了。
如果你在定义Ext.data.store使用了proxy属性,并定义了相应的url,那么Jayrock倒有一个将Model转为符合json格式字符串的方法:
string
temp
=
JsonConvert.ExportToString(model);
然后,Response.Write(temp); Response.End(); 如此请求这个url后,从而获得Json数据。
3. DataTable转Json Object —— 这个有两种做法,一种是将DataTable转为Model或Model[],再通过第二种方式转换,或者自己写一个方法拼接json 字符串:
///
<summary>
DataTable二维表格转为符合json格式的字符串
</summary>
///
<param name="tableSource">
数据库查询结果
</param>
///
<param name="fields">
需要添加进来的字段名
</param>
///
<returns></returns>
public
string
DataTableToJson(DataTable tableSource,
string
[] fields)
{
string
jsonData
=
"
{'totalCount':
"
+
tableSource.Rows.Count
+
"
,'root':[
"
;
if
(tableSource.Rows.Count
>
0
)
{
foreach
(DataRow row
in
tableSource.Rows)
{
jsonData
+=
"
{
"
;
for
(
int
i
=
0
; i
<
fields.Length; i
++
)
jsonData
+=
"
'
"
+
fields[i]
+
"
':'
"
+
row[fields[i]]
+
"
',
"
;
jsonData
=
jsonData.Substring(
0
, jsonData.Length
-
1
);
jsonData
+=
"
},
"
;
}
jsonData
=
jsonData.Substring(
0
, jsonData.Length
-
1
);
jsonData
+=
"
]}
"
;
}
else
{
jsonData
+=
"
]}
"
;
}
return
jsonData;
}
封装后格式为{
totalCount : 6,
root : [
{'id' : 1, 'name' : 'lislie' }, { 'id' : 2, 'name' : 'Mark' }...
]
}
使用方法:string temp = DataTableToJson(dt, {"id", "name"});
附录: Jayrock开源项目的动态链接库文件下载链接:,
不知道是不是CSDN的资源频道侵犯了很多出版商的利益,以至于改版之后,我在首页看不到“我的资源”的链接,而以前上传的资源现在也处于无法访问的状态,需要的朋友可以在评论中留下邮箱。