DataTables ajax requiere un nombre de colección json explícito para la fuente de datos devuelta?
Recientemente tuve un problema al implementar la funcionalidad ajax de jquery DataTables. Hasta que realmente le di a mi colección de objetos json un nombre explícito, no pude obtener nada para mostrar. ¿No debería haber una fuente de datos predeterminada si no se devuelve nada nombrado?
Configuración del control del lado del cliente (incluye campo oculto que suministra datos al anclaje dinámico:
$('#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
}
]
});
Aquí hay un fragmento del código del lado de mi servidor que devuelve la colección json.
tableRows es una colección de modelos que contienen los datos que se mostrarán.
var json = this.Json(new { data = tableRows });
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
Como dije antes, la llamada ajax devolvió datos pero no se mostraría hasta que le di un nombre a la colección. Tal vez me perdí este paso requerido en la documentación, pero¿No tendría sentido que el control se conecte a una única colección devuelta como la fuente de datos predeterminada y no requiera el nombre? Descubrir el nombre equivale a más de 2 horas de juego intentando diferentes cosas. Eso es todo lo que digo.
Quizás esto ayude a alguien más también ...