我最近在实现jquery DataTables的ajax功能时遇到了一个问题。直到我实际上给我的json对象集合一个明确的名称,我无法显示任何内容。如果没有返回任何名称,那么是否应该有默认数据源?
客户端控制设置(包括向动态锚点提供数据的隐藏字段:
$('#accountRequestStatus').dataTable(
{
"destroy": true, // within a method that will be called multiple times with new/different data
"processing": true,
"ajax":
{
"type": "GET",
"url": "@Url.Action("SomeServerMethod", "SomeController")",
"data": { methodParam1: 12341, methodParam2: 123423, requestType: 4123421 }
}
, "paging": false
, "columns": [
{ "data": "DataElement1" },
{ "data": "DataElement2", "title": "Col1" },
{ "data": "DataElement3", "title": "Col2" },
{ "data": "DataElement4", "title": "Col3" },
{ "data": "DataElement5", "title": "Col4" },
]
, "columnDefs": [
{
"targets": 0, // hiding first column, userId
"visible": false,
"searchable": false,
"sortable": false
},
{
"targets": 5, // creates action link using the hidden data for that row in column [userId]
"render": function (data, type, row) {
return "<a href='@Url.Action("ServerMethod", "Controller")?someParam=" + row["DataElement1"] + "'>Details</a>"
},
"searchable": false,
"sortable": false
}
]
});
这是我的服务器端代码片段,它返回json集合 tableRows是包含要显示的数据的模型的集合。
var json = this.Json(new { data = tableRows });
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
正如我之前所说,ajax调用返回了数据,但在我给集合命名之前不会显示。也许我错过了文档中的这个必要步骤,但是对于将控件连接到单个返回的集合作为默认数据源并且不需要名称而言是否有意义?找出这个名字的东西相当于大约2个多小时的混乱&#39;尝试不同的事情。这就是我所说的一切。
也许这也会帮助别人......
答案 0 :(得分:2)
dataTables实际上有一个dataSrc
属性! dataTables将在JSON中查找data
或aaData
部分。这就是你最终让它与new { data=tableRows }
合作的原因。也就是说,如果未指定 dataSrc
!如果您的JSON与该概念不同,则必须指定dataSrc
:
如果您返回未命名的数组/集合[{...},{...}]
:
ajax: {
url: "@Url.Action("SomeServerMethod", "SomeController")",
dataSrc: ""
}
如果返回名为data
或aaData
的JSON数组,例如customers
:
ajax: {
url: "@Url.Action("SomeServerMethod", "SomeController")",
dataSrc: "customers"
}
如果内容嵌套为{ a : { b : [{...},{...}] }}
ajax: {
url: "@Url.Action("SomeServerMethod", "SomeController")",
dataSrc: "a.b"
}
如果您有非常复杂的JSON或需要以任何方式操纵JSON,例如从内容中挑选樱桃 - dataSrc
也可以是一个函数:
ajax: {
url: "@Url.Action("SomeServerMethod", "SomeController")",
dataSrc: function(json) {
//do what ever you want
//return an array containing JSON / object literals
}
}
希望以上内容能够解决问题!