[C#][ASP.NET]利用jQuery.ajax取得ASP.NET DataTable

[C#][ASP.NET]利用jQuery.ajax取得ASP.NET DataTable

jQuery有一陣子沒摸,發現一些很簡單的jQuery API也得查文件(記憶力越來越差…XD),

而昨天再使用jQuery.ajax卻因為一個空格讓我快陷入99層的萬丈深淵(感謝阿尼哥讓我睜大雙眼,這行眼力真的要很好…orz),

整個過程自己記錄一下。

 

需求:在webform1.aspx按下按鈕執行ajax取得webform2.aspx/GetData 所返回的json,並在webform1.aspx顯示表格。

 

webform1.aspx

image

		$('#show2').click(function () {
		 
		$.ajax({
		type: "post",
		url: "WebForm2.aspx/GetData",
		data: "{}",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function (response) {
		var mydts = response.d.mydt;
		$('#Div1').html(BuildDetails(mydts));
		$('#Div2').html(BuildTable(mydts));
		},
		failure: function () {
		alert("error")
		}
		});
		 
		});
		 
		function BuildDetails(dataTable) {
		var content = [];     
		for (var row in dataTable) {
		for (var column in dataTable[row]) {
		content.push("<tr>")
		content.push("<td><b>")
		content.push(column)
		content.push("</td></b>")
		content.push("<td>")
		content.push(dataTable[row][column])
		content.push("</td>")
		content.push("</tr>")
		}        
		}
		var top = "<table border='1' class='dvhead'>";
		var bottom = "</table>";
		return top + content.join("") + bottom;
		}
		 
		function BuildTable(dataTable) {    
		var headers = [];
		var rows = [];
		//column
		headers.push("<tr>");
		for (var column in dataTable[0])
		headers.push("<td><b>" + column + "</b></td>");
		headers.push("</tr>");
		//row
		for (var row in dataTable) {
		rows.push("<tr>");
		for (var column in dataTable[row]) {
		rows.push("<td>");
		rows.push(dataTable[row][column]);
		rows.push("</td>");
		}
		rows.push("</tr>");
		}
		var top = "<table border='1' class='gvhead'>";
		var bottom = "</table>";
		return top + headers.join("") + rows.join("") + bottom;
		}   

 

webform2.aspx.cs

		private static Dictionary<string, object> ToJson( DataTable table )
		{
		Dictionary<string, object> d = new Dictionary<string, object>();
		d.Add( table.TableName, RowsToDictionary( table ) );
		return d;
		}
		 
		private static List<Dictionary<string, object>>
		RowsToDictionary( DataTable table )
		{
		List<Dictionary<string, object>> objs =
		new List<Dictionary<string, object>>();
		foreach( DataRow dr in table.Rows )
		{
		Dictionary<string, object> drow = new Dictionary<string, object>();
		for( int i = 0; i < table.Columns.Count; i++ )
		{
		drow.Add( table.Columns[ i ].ColumnName, dr[ i ] );
		}
		objs.Add( drow );
		}
		 
		return objs;
		}
		[WebMethod]
		public static Dictionary<string, object> GetData()
		{
		DataTable dt = new DataTable();
		dt.TableName ="mydt";
		dt.Columns.Add( "NAME", typeof( string ) );
		dt.Columns.Add( "AGE", typeof( string ) );
		dt.Columns.Add( "REMARK", typeof( string ) );
		 
		for( int i = 0; i < 1; i++ )
		{
		DataRow dr = dt.NewRow();
		dr[ "NAME" ] = "rico" + i.ToString();
		dr[ "AGE" ] = i.ToString();
		dr[ "REMARK" ] = "test_" + i.ToString();
		dt.Rows.Add( dr );
		}
		
		return ToJson( dt );
		}

 

結果

image

 

這裡順便貼一下自己一個很笨的錯誤。

image

當我按下按鈕就會出現以上錯誤訊息。

 

image

但明明response有資料。

 

 

後來發現在dataType那裏多了一個空格。

image

很鳥的問題,我卻搞好久。