无法使用新版本的JQuery Datatable返回任何数据

时间:2015-02-10 16:11:19

标签: asp.net-mvc jquery-datatables

我正在使用JQuery Datatables 1.10.4版开发ASP.Net MVC 5 Web应用程序。我希望使用对我的Controller的Ajax调用填充Datatable,它将返回Json数据。

在以前的应用程序中,我使用的是JQuery Datatable 1.9或更低版本。现在我已经升级了我的版本,发现我通常值得信赖的代码不再有效。有人可以帮帮我吗?

我的剃刀视图

<script>
$(document).ready(function () {

    $('#dataTables-example').dataTable({
        "serverSide": true,
        "processing": true,

        "ajax": {
            "url": "/Shift/GetShifts",
            "type": "POST"
        },
        "columns": [
        { "data": "shiftDateID" },
        { "data": "shiftTitle" },
        { "data": "description" },
        { "data": "description" },
        { "data": "shiftStartDate" },
        { "data": "shiftEndDate" }
    ]
    });

});

<table id="dataTables-example" class="display compact" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>Ref</th>
            <th>Shift</th>
            <th>Trust</th>
            <th>Hospital</th>
            <th>Start Date</th>
            <th>End Date</th>
        </tr>
    </thead>

    <tbody></tbody>
</table>

我的控制器

public JsonResult GetShifts(JQueryDataTableParamModel param)
{
            IEnumerable<ShiftDate> allShifts;

            allShifts = _shiftDateService.GetAllShiftDatesToBeFilled();

            IEnumerable<ShiftDate> filteredShifts;
            if (!string.IsNullOrEmpty(param.sSearch))
            {
                filteredShifts = _shiftDateService.GetAllShiftDatesToBeFilled()
                            .Where(s => s.Shift.shiftTitle.ToUpper().Contains(param.sSearch.ToUpper())).ToList();
            }
            else
            {
                filteredShifts = allShifts;
            }

            var displayedShifts = filteredShifts;
            displayedShifts = displayedShifts
                        .Skip(param.iDisplayStart)
                        .Take(param.iDisplayLength);

            var aaData = displayedShifts.Select(s => new string[] { Convert.ToString(s.shiftDateID), s.Shift.shiftTitle, s.Shift.Organisation.description, s.Shift.Locations.FirstOrDefault().ListItem.description, s.shiftStartDate.ToShortDateString(), s.shiftEndDate.ToShortDateString()}).ToArray();

            return Json(new
            {
                sEcho = param.sEcho,
                aaData = aaData,
                iTotalRecords = allShifts.Count(),
                iTotalDisplayRecords = filteredShifts.Count()
            }, JsonRequestBehavior.AllowGet);

        }  

}

public class JQueryDataTableParamModel
{
    public string sEcho { get; set; }
    public string sSearch { get; set; }
    public int iDisplayLength { get; set; }
    public int iDisplayStart { get; set; }
}

上面的代码现在不起作用,即返回任何数据。任何人都可以告诉我需要做些什么更改才能让我的代码使用更新版本的JQuery Datatables?

谢谢,

1 个答案:

答案 0 :(得分:1)

发送到服务器的参数和返回的预期参数在1.9和1.10之间变化。以下示例:

return Json(new
{
    error = param.sEcho,
    data = aaData,
    recordsTotal = allShifts.Count(),
    recordsFiltered = filteredShifts.Count()
}, JsonRequestBehavior.AllowGet);

要查看用例的完整更改列表,请转到here