服务器再把gridview反构造成datatable, 再给datatable增加一行之后,绑定到gridview,然后发回客户端...
能不能简单一点呢?
在使用ajax数据请求数据,通常都是简单格式,比如string,信息量较少。当然也可以请求回xml,但是xml数据冗余多,取到客户端处理比json麻烦的多。
能不能简单一点呢?
上面这些问题,如果datatable与json类型可以方便的相互转换,都可以迎刃而解了。
优点:1)避免不必要的回传;
2)精简异步请求数据的大小 ;
3)解决数据量较大时,数据发送与接收繁琐的问题。
既然好处这么多,我们上代码吧。
前台代码:
复制代码 代码如下:
后台代码:
///
复制代码 代码如下:
/// 页面加载时
///
///
///
protected void page_load(object sender, eventargs e)
{
//判断是否异步请求
if (request.querystring[ajax] == 1)
{
processrequest();
}
}
///
/// 处理异步请求
///
private void processrequest()
{
response.contenttype = text/html;
string json = request.form[json];
//反序列化datatable
datatable newdtb = json2dtb(json);
//序列化datatable为json
string back = dtb2json(newdtb);
response.write(back);
response.end();
}
///
/// datatable转json
///
///
///
private string dtb2json(datatable dtb)
{
javascriptserializer jss = new javascriptserializer();
arraylist dic = new arraylist();
foreach (datarow row in dtb.rows)
{
dictionary drow = new dictionary();
foreach (datacolumn col in dtb.columns)
{
drow.add(col.columnname, row[col.columnname]);
}
dic.add(drow);
}
return jss.serialize(dic);
}
///
/// json转datatable
///
///
///
private datatable json2dtb(string json)
{
javascriptserializer jss = new javascriptserializer();
arraylist dic = jss.deserialize(json);
datatable dtb = new datatable();
if (dic.count > 0)
{
foreach (dictionary drow in dic)
{
if (dtb.columns.count == 0)
{
foreach (string key in drow.keys)
{
dtb.columns.add(key, drow[key].gettype());
}
}
datarow row = dtb.newrow();
foreach (string key in drow.keys)
{
row[key] = drow[key];
}
dtb.rows.add(row);
}
}
return dtb;
}
再附一个下载文件,觉得有用的可以下载看看
json.zip