Asp.net下使用Jquery Ajax传送和接收DataTable的代码

 更新时间:2010年09月12日 13:51:19   作者:  
对于习惯使用GridView的人来说,前台页面需要动态添加表格的行数,是一件痛苦的事。GridView处理这种事情相当麻烦,你点击“新增一行”,需要回传到服务器。
服务器再把GridView反构造成DataTable, 再给DataTable增加一行之后,绑定到GridView,然后发回客户端...
能不能简单一点呢?
在使用Ajax数据请求数据,通常都是简单格式,比如String,信息量较少。当然也可以请求回XML,但是XML数据冗余多,取到客户端处理比json麻烦的多。
能不能简单一点呢?
上面这些问题,如果DataTable与JSON类型可以方便的相互转换,都可以迎刃而解了。
优点:1)避免不必要的回传;
2)精简异步请求数据的大小 ;
3)解决数据量较大时,数据发送与接收繁琐的问题。
既然好处这么多,我们上代码吧。
前台代码:
复制代码 代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="js/json2.js"></script>
<script type="text/javascript">
//onload
$(function() {
//点击botton1
$("#botton1").click(function() {
var url = "default.aspx?ajax=1";
var dtb = generateDtb();
//序列化对象
var postdata = JSON.stringify(dtb);
//异步请求
$.post(url, { json: postdata }, function(json) {
createTable(json);
}, "json")
});
});
//生成DataTable对象
function generateDtb() {
var dtb = new Array();
for (var i = 0; i < 10; i++) {
var row = new Object();
row.col1 = i;
row.col2 = i % 2 == 0 ? true : false;
row.col3 = i + "he\nll\"ow";
dtb.push(row);
}
return dtb;
}
//显示Json中的数据
function createTable(json) {
var table = $("<table border='1'></table>");
for (var i = 0; i < json.length; i++) {
o1 = json[i];
var row = $("<tr></tr>");
for (key in o1) {
var td = $("<td></td>");
td.text(o1[key].toString());
td.appendTo(row);
}
row.appendTo(table);
}
table.appendTo($("#back"));
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="botton1" type="button" value="button" />
<div id="back">
</div>
</div>
</form>
</body>
</html>

后台代码:
/// <summary>
复制代码 代码如下:

/// 页面加载时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
//判断是否异步请求
if (Request.QueryString["ajax"] == "1")
{
ProcessRequest();
}
}
/// <summary>
/// 处理异步请求
/// </summary>
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();
}
/// <summary>
/// DataTable转Json
/// </summary>
/// <param name="dtb"></param>
/// <returns></returns>
private string Dtb2Json(DataTable dtb)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
foreach (DataRow row in dtb.Rows)
{
Dictionary<string, object> drow = new Dictionary<string, object>();
foreach (DataColumn col in dtb.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return jss.Serialize(dic);
}
/// <summary>
/// Json转DataTable
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
private DataTable Json2Dtb(string json)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = jss.Deserialize<ArrayList>(json);
DataTable dtb = new DataTable();
if (dic.Count > 0)
{
foreach (Dictionary<string, object> 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

相关文章

  • jQuery实现的多屏图像图层切换效果实例

    jQuery实现的多屏图像图层切换效果实例

    这篇文章主要介绍了jQuery实现的多屏图像图层切换效果,可实现多个图层的点击切换效果,设计jQuery鼠标事件及样式的操作技巧,需要的朋友可以参考下
    2015-05-05
  • jQuery dataTables与jQuery UI 对话框dialog的使用教程

    jQuery dataTables与jQuery UI 对话框dialog的使用教程

    这篇文章主要介绍了jQuery dataTables与jQuery UI 对话框dialog的使用教程的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • jQuery实现的简单获取索引功能示例

    jQuery实现的简单获取索引功能示例

    这篇文章主要介绍了jQuery实现的简单获取索引功能,涉及jQuery事件响应及元素索引获取相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • EasyUI实现二级页面的内容勾选的方法

    EasyUI实现二级页面的内容勾选的方法

    在使用EasyUI的时候,我们经常回遇到在二级页面进行勾选的时候,这里给大家分享一个比较简单实用的实现方法,希望大家能够喜欢。
    2015-03-03
  • 基于jQuery的ajax方法封装

    基于jQuery的ajax方法封装

    AJAX 是一种用于创建快速动态网页的技术。这篇文章主要介绍了基于jQuery的ajax方法封装的相关资料,需要的朋友可以参考下
    2016-07-07
  • jQuery 标题的自动翻转实现代码

    jQuery 标题的自动翻转实现代码

    我们平时在开发web程序的时候,想把一个新闻源滚动显示新闻的条目的标题及内容摘要,而且是每次一条,有点类似csdn的滚动广告。
    2009-10-10
  • jQuery增加与删除table列的方法

    jQuery增加与删除table列的方法

    这篇文章主要介绍了jQuery增加与删除table列的方法,涉及jQuery针对table表格元素动态操作相关技巧,需要的朋友可以参考下
    2016-03-03
  • 浅谈jquery点击label触发2次的问题

    浅谈jquery点击label触发2次的问题

    下面小编就为大家带来一篇浅谈jquery点击label触发2次的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • JQuery.Ajax()的data参数类型实例详解

    JQuery.Ajax()的data参数类型实例详解

    这篇文章主要介绍了JQuery.Ajax()的data参数类型实例详解,需要的朋友可以参考下
    2015-11-11
  • Struts2+jquery.form.js实现图片与文件上传的方法

    Struts2+jquery.form.js实现图片与文件上传的方法

    这篇文章主要介绍了Struts2+jquery.form.js实现图片与文件上传的方法,结合实例形式详细分析了jquery.form.js插件实现前台图片上传提交及Struts2进行后台处理的相关步骤与实现技巧,需要的朋友可以参考下
    2016-05-05

最新评论