Записи не отображаются в jquery.datatables с использованием обработки разбиения на страницы на стороне сервера - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь заставить работать jquery.datatables, используя обработку на стороне сервера и нумерацию страниц.Я использовал следующую статью в качестве руководства, потому что она близка к версии VS2017, которую я использую -

https://www.c -sharpcorner.com / article / filtering-jquery-data-table-server- server-side-using-mvc-and-entity-framework /

Когда я запускаю приложение, я получаю следующую ошибку:

Предупреждение DataTables: table id = tblrtr - Запрошенный неизвестный параметр 'Id 'для строки 0, столбца 0. Для получения дополнительной информации об этой ошибке см. http://datatables.net/tn/4

и пустую сетку, которая показывает 10 пустых строк и правильное количество страниц.

У меня естьотлаживал код, и он находил все записи и значения, и действительно, переменная finalresult действительно возвращает содержимое 10 строк, но, похоже, они не попадают в таблицу данных.

Вот код контроллера:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using RTMGMTTest.Models;

namespace RTMGMTTest.Controllers
{
    public class ReportsToRecordsController : Controller
    {
        private readonly RTMGMTContext _context;

        public ReportsToRecordsController(RTMGMTContext context)
        {
            _context = context;
        }

        // GET: ReportsToRecords
        public async Task<IActionResult> Index()
        {
            //return View(await _context.ReportsToRecords.ToListAsync());
            return View();
        }


        [HttpPost]
        public JsonResult RTRList(DTParameters param)
        {

            int TotalCount = 0;
            var filtered = this.GetRTRFiltered(param.Search.Value, param.SortOrder, param.Start, param.Length, out TotalCount);

            var RTRList = filtered.Select(o => new ReportsToRecords()
            {

                Id = o.Id,
                ReportingId = o.ReportingId,
                Title = o.Title,
                Name = o.Name,
                ReportsToId = o.ReportsToId,
                EmployeeId = o.EmployeeId
            });



            DTResult<ReportsToRecords> finalresult = new DTResult<ReportsToRecords>
            {
                draw = param.Draw,
                data = RTRList.ToList(),
                recordsFiltered = TotalCount,
                recordsTotal = filtered.Count

            };

            return Json(finalresult);

        }

и

// для обработки на стороне сервера

public List<ReportsToRecords> GetRTRFiltered(string search, string sortOrder, int start, int length, out int TotalCount)
{


    var result = _context.ReportsToRecords.Where(p => (search == null 
        || (p.ReportingId != null && p.ReportingId.ToLower().Contains(search.ToLower())
        || p.Title != null && p.Title.ToLower().Contains(search.ToLower())
        || p.Name != null && p.Name.ToLower().Contains(search.ToLower())
        || p.ReportsToId != null && p.ReportsToId.ToLower().Contains(search.ToLower())
        || p.EmployeeId!= null && p.EmployeeId.ToLower().Contains(search.ToLower())
        ))).ToList();

    TotalCount = result.Count;

    result = result.Skip(start).Take(length).ToList();


    switch (sortOrder)
    {
        case "ReportingId":
            result = result.OrderBy(a => a.ReportingId).ToList();
            break;
        case "Title":
            result = result.OrderBy(a => a.Title).ToList();
            break;
        case "Name":
            result = result.OrderBy(a => a.Name).ToList();
            break;
        case "ReportsToId":
            result = result.OrderBy(a => a.ReportsToId).ToList();
            break;
        case "EmployeeId":
            result = result.OrderBy(a => a.EmployeeId).ToList();
            break;
        default:
            result = result.AsQueryable().ToList();
            break;
    }
    return result.ToList();
}

Страница просмотра выглядит следующим образом:

@model IEnumerable<RTMGMTTest.Models.ReportsToRecords>

@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

<p>
    <a asp-action="Create">Create New</a>
</p>
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css" />
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>

<script>

    $(document).ready(function () {

        if ($.fn.DataTable.isDataTable('#tblrtr')) {
            $('#tblrtr').dataTable().fnDestroy();
            $('#tblrtr').dataTable().empty();

        }

        var complete = $('#tblrtr').DataTable(
            {
                "serverSide": true,
                "destroy": true,
                "processing": true,
                "ajax":
                    {
                        url: "/ReportsToRecords/RTRList",
                        method: "POST"
                    },
                "columns": [
                    { "data": "Id"},
                    { "data": "ReportingId" },
                    { "data": "Title" },
                    { "data": "Name" },
                    { "data": "ReportsToId" },
                    { "data": "EmployeeId" }

                ]
            }

        );

        /// Following code is for filter input to apply filter only on Enter
        var itm = $("#tblrtr_filter input")

        itm.unbind();
        itm.keyup(function (e) {
            //enter or tab
            if (e.keyCode == 13) {
                complete.search(this.value).draw();
            }
        });


    });
</script>
<table class="table" id="tblrtr">
    <thead>
        <tr>
            <th>
                Id
            </th>
            <th>
                ReportingId
            </th>
            <th>
                Title
            </th>
            <th>
                Name
            </th>
            <th>
                ReportsToId
            </th>
            <th>
                EmployeeId
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody></tbody>
</table>

Кто-нибудь знает, что может привести к тому, что данные, возвращаемые с контроллера, не будут отображаться и вызвать полученное сообщение?Спасибо.

...