2014-11-01 167 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)); 

}