我正在处理ASP.NET Web Forms
申请。使用Visual Studio 2012
标准模板。我想使用DataTable 1.10
对服务器进行Ajax调用。由于我在使用datatables
时遇到了麻烦,所以我从头开始,所以我可以确认当我使用更简单的例子(比如从txt文件中读取)时,它可以正常工作。但是现在,按照官方网站上的示例,我想实现对方法的真正Ajax调用并返回一些数据。
我的页面Test.aspx
包含以下代码:
<script type="text/javascript">
$(document).ready(function () {
$('#example').dataTable({
"processing": true,
"serverSide": true,
"ajax": "/Table.aspx/TestAjax"
});
});
和一个非常简单的HTML:
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
</tr>
</tfoot>
</table>
所有这些都是从示例中获取的,同样,为了简单起见,最小化了列数。
从一个例子中我把这个代码用于我的方法:
[WebMethod]
public static string TestAjax(string sEcho)
{
var list = new FormatedList();
list.sEcho = sEcho;
list.iTotalRecords = 1;
list.iTotalDisplayRecords = 1;
var item = new List<string>();
item.Add("Gecko");
list.aaData = new List<List<string>>();
list.aaData.Add(item);
return list.ToString();
}
其中FormatedList
是这样定义的类:
public class FormatedList
{
public FormatedList()
{
}
public string sEcho { get; set; }
public int iTotalRecords { get; set; }
public int iTotalDisplayRecords { get; set; }
public List<List<string>> aaData { get; set; }
}
因此,当我在控制台中运行项目时,我可以看到Status 200 OK
来调用Test.aspx/TestAjax
,但我也从浏览器中收到错误Json
的错误消息。在服务器端代码的示例中,方法的返回类型是实际的类FormatedList
,但它给出了相同的结果。我可以理解,在这两种情况下,我都没有返回实际的Json
浏览器给我一个错误,但是,我在示例中看到人们正在使用这样的方法,听起来像是&#39工作。
那么我的错误在哪里,如果有,在代码中,以及从服务器返回数据的正确方法是什么(使用C#),以便我可以使用DataTable
?
答案 0 :(得分:1)
您只是致电list.ToString()
。这通常只会产生类型名称。
相反,最好序列化为JSON。根据我的经验,ASMX / [WebMethod]不能很好地处理这个问题。您需要使用库来序列化它,通常的建议是Json.NET。获得该库并将相应的using语句using Newtonsoft.Json;
添加到班级的顶部后,请尝试将您的函数更改为:
[WebMethod]
public static void TestAjax(string sEcho)
{
var list = new FormatedList();
list.sEcho = sEcho;
list.iTotalRecords = 1;
list.iTotalDisplayRecords = 1;
var item = new List<string>();
item.Add("Gecko");
list.aaData = new List<List<string>>();
list.aaData.Add(item);
string json=JsonConvert.SerializeObject(list);
Response.ContentType= "application/json";
Response.Write(json);
}
我返回void因为我们要直接写回应。
顺便问一下,你有没有想过Web API?这是一条更好的路线而不是ASMX / [WebMethod]。使用Web API函数,您可以return list;
,框架将根据所请求的内容类型将列表转换为JSON(使用Json.NET!)或XML。