有时候我们使用Ajax链接一般处理程序需要返回多个值,然而这些数据并非在一个查询表内,此时便想到构造一个虚拟的DataTable,这样就可以返回多个值了(当然有很多办法,这是其中一种 )。
首先我们需要准备一个 script 和一个 ashx 文件。
在script中写一个ajax用于接收返回来的数据,代码如下。
<script type="text/javascript">
$(function () {
$.ajax({
type: "post", //提交方式
url: "/ashx/PersonnelRegistrationForm.ashx", //一般处理程序的路径
data: { corpName: corpName, corpCode: corpCode }, //向后台传入的值
success: function (data) { //返回成功后将要做的事,这里是返回一个表
var datainfo = $.parseJSON(data);
alert(datainfo[0].OrderNo);
alert(datainfo[0].RowGuid);
alert(datainfo[0].ResultNum);
},
error: function () {
alert('系统发生错误');
}
});
})
</script>
然后在名为PersonnelRegistratinForm一般处理程序进行数据处理,然后构造所需要的值将其返回。
#region 构造返回的表
DataTable table = new DataTable(); //构造表
DataColumn column1 = new DataColumn("ResultNum", Type.GetType("System.Int32")); //构造列及所对应的类型
DataColumn column2 = new DataColumn("OrderNo", Type.GetType("System.String"));
DataColumn column3 = new DataColumn("RowGuid", Type.GetType("System.String"));
table.Columns.Add(column1); //将列添加到table表中
table.Columns.Add(column2);
table.Columns.Add(column3);
DataRow dr = table.NewRow(); //table表创建行
dr["ResultNum"] = person_result;
dr["OrderNo"] = OrderNo;
dr["RowGuid"] = t_ROWGUID;
table.Rows.Add(dr); //将数据加入到table表中
string json = SerializerHelper.ToJsonString(table); //序列化json对象
context.Response.Write(json);
context.Response.End();
#endregion
构造table时可以使用简便写法:
DataTable table = new DataTable(); //构造表
table.Columns.Add("ResultNum", Type.GetType("System.Int32"));
table.Columns.Add("OrderNo", Type.GetType("System.String"));
table.Columns.Add("RowGuid", Type.GetType("System.String"));
DataRow dr = table.NewRow(); //table表创建行
dr["ResultNum"] = person_result;
dr["OrderNo"] = OrderNo;
dr["RowGuid"] = t_ROWGUID;
table.Rows.Add(dr); //将数据加入到table表中
这样前台的ajax就可以获取到返回过去的table了。当然别忘记引用命名空间
using System.Data;
using System.Data.SqlClient;
using System.Text;