如何在ASP.NET Web Forms项目中使用来自datatable的Ajax调用

时间:2014-07-10 13:30:22

标签: asp.net ajax webforms datatable

我正在处理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

1 个答案:

答案 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。

相关问题