Столбец не распознается в json, хотя данные есть как в верхнем, так и в нижнем регистре. - PullRequest
0 голосов
/ 02 августа 2020

Хорошо. Довольно странно, я получаю недопустимый столбец, хотя он есть в моем коде json, я пробовал как верхний, так и нижний регистр версии, и все равно та же ошибка, потому что моя дата находится в ut c формат торможения json?

[HttpGet]
public IActionResult  GetAuditTrailData() {
    int test = 7;
    var auditTrailsHistory = _context.MisAuditTrail.Where(w => w.isActive == true && w.isDeleted == false && w.MISObjectId==test).ToList();
    string output = JsonConvert.SerializeObject(auditTrailsHistory);
    return Json(new { data = auditTrailsHistory });
}

Ajax вызов

$(document).ready(function () {
    $("#audTrailTable").DataTable({
        "ajax": {
            url: "/MISObjects/GetAuditTrailData/",
            type: "get",
            database: "json"
        },
        "columns": [
            { "data": "createddate" },
            { "data": "createdby" },
            { "data": "action" }

        ],
        "scrollY": "200px",
        "scrollCollapse": true,
        "paging": false,
        "processing": true, // for show progress bar
        "serverSide": true, // for process server side
        "filter": true, // this is for disable filter (search box)
        "orderMulti": false // for disable multiple column at once
    })
});

Json

"Созданное дело", " CreatedDate ":" 2020-07-28T20: 59: 54.2791487 + 01: 00 "," CreatedBy ":" David "," isActive ": true," isDeleted ": false}, {" AuditTrailType ": 0," Id " : 5, «IPAddressBytes»: «», «TennantId»: «92b4ebe2-c81e-4fbf-91d0-9b422a7843c4», «AuditType»: 0, «MISObjectId»: 7, «Action»: «Дэвид провел несколько тестов»

Ошибка

введите описание изображения здесь

1 Ответ

2 голосов
/ 04 августа 2020

В соответствии с предоставленным вами форматом json он очень запутан, и есть определенные проблемы с форматом.

Убедитесь, что имена полей в json возвращенный вами массив соответствует именам и порядку столбцов в методе DataTable.

Вот полная демонстрация для вашей справки:

       public IActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public IActionResult GetAuditTrailData()
        {
            int test = 7;
            var auditTrailsHistory = _context.MisAuditTrail.Where(w => w.isActive == true && w.isDeleted == false && w.MISObjectId == test).ToList();
            //string output = JsonConvert.SerializeObject(auditTrailsHistory);
            return Json(new { data = auditTrailsHistory });
        }

Вот правильный Возвращаемый формат json (для краткости я передал только три обязательных поля):

{"data":[{"action":"David did some tests","createdby":"David","createddate":"2020-07-29T03:59:54.2791487"},{"action":"Jack did some tests","createdby":"Jack","createddate":"2020-07-29T03:59:54.2791487"}]}

Индекс:

<div class="card-body">
    <table id="audTrailTable" class="table table-bordered table-striped">
        <thead>
            <tr>
                <th>action</th>
                <th>createdby</th>
                <th>createddate</th>
            </tr>
        </thead>
    </table>
</div>

@section Scripts{

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
    <link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function () {
            $("#audTrailTable").DataTable({
                "ajax": {
                    url: "/MISObjects/GetAuditTrailData/",
                    type: "post",
                    database: "json"
                },
                "columns": [
                    { "data": "action" },
                    { "data": "createdby" },
                    {
                        "data": "createddate",
                        render: function (data, type, row) {
                            if (type === "sort" || type === "type") {
                                return data;
                            }
                            //here you can convert date to any format you want to show
                            return moment(data).format("MM-DD-YYYY HH:mm:ss");
                        }
                    }
                ],
                "scrollY": "200px",
                "scrollCollapse": true,
                "paging": false,
                "processing": true, // for show progress bar
                "serverSide": true, // for process server side
                "filter": true, // this is for disable filter (search box)
                "orderMulti": false // for disable multiple column at once
            })
        });
                     
    </script>
}

Вот результат теста:

введите описание изображения здесь

...