2014-11-01 134 views
0

我想动态加载我的数据表与一个ASP.NET编写的C#web方法。该方法似乎工作正常,但我没有尝试获取数据表以正确响应。JQuery,Datatables和Ajax

这里是我的代码:

var oTable = $('table.datatable').dataTable({ 
    "processing": true, 
    "serverSide": true, 
    "ajax": { 
    "url": "SearchForCustomers.aspx/GetUsers", 
    "type": "POST", 
    "contentType": "application/json; charset=utf-8", 
    "dataType": "json" 
    }, 
    "columns": [{ 
    "data": "A" 
    }, { 
    "data": "B" 
    }, { 
    "data": "C" 
    }, { 
    "data": "D" 
    }, { 
    "data": "E" 
    }, { 
    "data": "F" 
    }] 
}); 

我的ASP.NET Web的方法:

public class AA 
{ 
    public string A { get; set; } 
    public string B { get; set; } 
    public string C { get; set; } 
    public string D { get; set; } 
    public string E { get; set; } 
    public string F { get; set; } 
} 

[WebMethod] 
public static string GetUsers() 
{ 
    /*List<UserAccount> listOfUserAccounts = UserAccount.GetUserAccounts(ApplicationConfiguration.ORDER_TYPES.DESC); 
    JavaScriptSerializer jSearializer = new JavaScriptSerializer(); 
    return jSearializer.Serialize(listOfUserAccounts);*/ 

    List<AA> list = new List<AA>(); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 

    JavaScriptSerializer jSearializer = new JavaScriptSerializer(); 
    return jSearializer.Serialize(list); 
} 

的AA类是为了测试功能DataTable的组成。数据表完全没有收到任何行。

在此先感谢。

回答

0

为什么它不与工作的WebMethod

因为,当Jquery datable使得post请求,它就无法发送一些参数post method,在这种情况下,GetUsers。但由于此function没有输入参数,因此显示ajax错误internal error 500。错误信息是 - Invalid JSON primitive,如果你搜索这个,它说,如果jQuery提供的参数postwebmethod(本例中是这样)不匹配,那么会发生这个错误。我知道,这个输入参数在绑定时不是必需的,但仍然datatable ajax发送绑定时间,这些参数有助于sorting,paging等。以下是屏幕截图,显示POST params。

Post Params

如何解决这个

搬完方法ashx hanlder,这样的参数(如排序,搜索等)将被context.Request.Form捕获(这可能不是需要绑定时间 - 这是你的情况)。

但是,您仍然需要修改提供的代码,您需要将List<AA>包装为data并且还包括totalRecord,否则jquery datatable会显示错误。以下是我试过的代码,它正在工作。

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "application/json"; 

    List<AA> list = new List<AA>(); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 
    list.Add(new AA { A = "a", B = "b", C = "c", D = "d", E = "e", F = "f" }); 

    JavaScriptSerializer jSearializer = new JavaScriptSerializer(); 

    var result = new { data = list, recordsTotal = 8 }; 

    context.Response.Write(jSearializer.Serialize(result)); 

}