I'm trying to get the DataTables(http://datatables.net) to work with a JsonResult returned by an ASP.Net MVC Controller. I keep getting a "DataTables warning (table id = 'example'): Requested unknown parameter '0' from the data source for row 0" error which according to the docs means it cant find the columns.
The code in controller that returns the JsonResult looks like:
public JsonResult LoadPhoneNumbers()
{
List<PhoneNumber> phoneNumbers = new List<PhoneNumber>();
PhoneNumber num1 = new PhoneNumber { Number = "555 123 4567", Description = "George" };
PhoneNumber num2 = new PhoneNumber { Number = "555 765 4321", Description = "Kevin" };
PhoneNumber num3 = new PhoneNumber { Number = "555 555 4781", Description = "Sam" };
phoneNumbers.Add(num1);
phoneNumbers.Add(num2);
phoneNumbers.Add(num3);
return Json(phoneNumbers, JsonRequestBehavior.AllowGet);
}
PhoneNumber is just a plain C# class with 2 properties, Number and Description.
The javascript that retrieves and loads the data looks like:
<script>
$(document).ready(function () {
$('#example').dataTable({
"bProcessing": true,
"sAjaxSource": '/Account/LoadPhoneNumbers/',
"sAjaxDataProp": ""
});
});
</script>
And the html looks like:
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
<thead>
<tr>
<th>
Number
</th>
<th>
Description
</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
</tfoot>
</table>
I've deliberately set sAjaxDataProp to an empty string so that DataTables does not look for aaData. Even when I explicitly set aaData like so in the controller:
return Json(new { aaData = phoneNumbers });
I still get the error. Any advice please?
Thanks!
The following works great for me:
I have removed the
sAjaxDataProp
property.with this data source:
and for your example with phones simply:
In this example it appears that the data returned from the controller method needs to be in a specific format. He's actually returning the list as part of aaData. It also explains what each parameter is for. Perhaps you're just not formatting the return in a json format that DataTables understands.