怎麼樣在客戶端使用服務器端的DataTable。在嘗試使用從服務器端返回的一個DataTable時,總會有一個異常拋出,今天找到原因了。
首先,需要說明的是asp.net ajax框架使用JSON來傳遞信息。JSON是基於Javascript的一種輕量級的信息傳遞方式,其可以表示的信息格式是有限的。JSON可以表示類似於字典和數組的信息格式。當我們使用一個比較簡單的對象時,利用JSON可以表示;但在使用一些複雜對象時,如DataTable,JSON並不能表示DataTable對象的所包含信息結構(DataTable並不能序列化爲JSON的表現形式),所以會有異常拋出。
怎麼樣來解決這個問題呢?
第一種解決方案:使用Microsoft.Web.Preview.dll所提供的JS轉換器功能。
( 該dll是ASP.NET Futures July 2007安裝後產生的)
在使用ASP.NET Futures July 2007時,需要在web.config中進行一些配置:
<!--自定義轉換器聲明,asp.net ajax所需要的配置-->
<system.web.extensions>
<scripting>
<webServices>
<!--<jsonSerialization maxJsonLength="500">-->
<jsonSerialization>
<converters>
<add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview, Version=1.2.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview, Version=1.2.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview, Version=1.2.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</converters>
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>
以上配置信息直接位於根節點,表示爲DataTable、DataSet與DataRow指定一個轉換器,這樣在DataTable、DataSet與DataRow返回到客戶端時,會被轉換爲JSON可以識別將表示的信息格式。下面是一個示例!
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
[System.Web.Services.WebMethod]
public static DataTable GetDataTable()
{
DataTable table = new DataTable();
Random random = new Random(DateTime.Now.Millisecond);
table.Columns.Add(new DataColumn("ID", typeof(int)));
table.Columns.Add(new DataColumn("Text", typeof(string)));
for (int i = 0; i < 10; i++)
{
table.Rows.Add(i, random.Next().ToString());
}
return table;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>asp.net ajax使用DataTable</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<input type="button" value="GetDataTable" onclick="GetDataTable()" />
<script language="javascript" type="text/javascript">
PageMethods.set_timeout(5000);
PageMethods.set_defaultFailedCallback(OnFailed);
function GetDataTable()
{
PageMethods.GetDataTable(OnSucceed);
}
function OnSucceed(DataTable)
{
var sb = new Sys.StringBuilder();
sb.append("<table border='1'><tr><td>ID</td><td>Text</td></tr>");
for ( var i = 0 ; i < DataTable.rows.length ; i ++ )
{
sb.append("<tr><td>" + DataTable.rows[i].ID + "</td><td>" + DataTable.rows[i].Text + "</td></tr>");
}
sb.append("</table>");
$get("content").innerHTML = sb.toString();
}
function OnFailed(ErrorHandling)
{
var ErrorMessage = '是否超時'+ErrorHandling.get_timedOut()+'/n錯誤信息爲:' + ErrorHandling.get_message();
ErrorMessage = ErrorMessage + '/n異常名稱爲:' + ErrorHandling.get_exceptionType() + '/n錯誤位置爲:' + ErrorHandling.get_stackTrace();
alert(ErrorMessage);
}
</script>
</div>
<div id="content">
</div>
</form>
</body>
</html>
asp.net ajax框架使用-DataTable的使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
ASP.NET正則表達式提取網頁資源
jackywei1987
2019-02-23 13:51:42
ASP.NET一般處理程序(.ashx.cs)中使用Session的問題
1290605023
2019-02-23 00:06:09
IIS中關於僞靜態的設置
waymy
2019-02-22 23:57:02
JSON、文本模板、HTML模板
騎士救兵
2019-02-24 13:26:33
AsyncHttpClient 實戰總結及思考
一劍圍城
2019-02-23 00:30:05
8.spark core之讀寫數據
菲立思教育
2019-02-23 00:14:30
python中json和字符編碼的轉換
aaabbbbttt
2019-02-22 23:53:56
android 解析json數據格式
zhaojianping
2019-02-22 23:48:00
zookeeper+mesos+marathon+docker裏面的一些小功能實現
鳶沫是隻貓
2019-02-22 23:37:39