kendo grid отправляет json на контроллер

#javascript #.net #kendo-grid

#javascript #.net #kendo-grid

Вопрос:

Я отправляю json из kendo grid при удалении строки, но в контроллере я получаю null.

 $(document).ready(function () {
                $("#grid").kendoGrid({
                    dataSource: {
                        type: "json",
                        transport: {
                            read: {
                                type: "POST",
                                dataType: "json",
                                url: "/Home/GetPatients"
                            },
                            destroy: {
                                url: '@Url.Action("deletePatient", "Home")',
                                type: "POST",
                                contentType: "application/json; charset=utf-8",
                                dataType: "json"
                            },
                            parameterMap: function (options, operation) {
                                if (operation !== "read" amp;amp; options)
                                    return kendo.stringify(options);
                            }
                        },
                        schema: {
                            model: {
                                id: "Id",
                                fields: {
                                    FirstName: { type: "string" },
                                    LastName: { type: "string" },
                                    CNP: { type: "string" },
                                    Birthdate: { type: "date" }
                                }
                            }
                        },
                        pageSize: 20,
                    },
                    height: 300,
                    sortable: true,
                    pageable: {
                        refresh: true,
                        pageSizes: true,
                        buttonCount: 5
                    },
                    toolbar: ["create"],
                    columns:
                        [
                            { field: "LastName", title: "Nume" },
                            { field: "FirstName", title: "Prenume" },
                            { field: "CNP", title: "CNP" },
                            { field: "Birthdate", title: "Data nasterii", format: "{0:dd/MM/yyyy}" },
                            {
                                command:
                                    [
                                        {
                                            name: "edit"
                                        },
                                        {
                                            name: "destroy",
                                        }
                                    ],
                                    title: "", width: "172px"
                            }
                        ],
                    editable: "popup"
                });
            });
  

Я помещаю debug здесь в метод, и фактический параметр ‘j’ равен нулю, это должна быть строка (сериализовать json).
В Chrome -> режим отладки -> сеть -> Я получил статус 200 ok, и в полезной нагрузке запроса я просматриваю json со всеми данными строки, что на самом деле нормально, но я застрял.

 [HttpPost]
public ActionResult deletePatient(string j)
{
    //List<Patient> objName = new JavaScriptSerializer().Deserialize<List<Patient>>(j);
    int a = 5;
    a = a - 4;
    return Json(a);
}
  

Ответ №1:

Вы отправляете строку и притворяетесь, что это JSON (см. Ваши contentType и data ). Это может сработать, если вы измените его на что-то вроде text/plain .

Но вы даже не должны пытаться это! Вы должны создать PatientModel на C #, Который имеет свойства FirstName , LastName и так далее, и ожидать эту самую модель в вашем методе контроллера. Таким образом, вам не нужно сериализовать и десериализовать данные самостоятельно. Учитывая, что у вас уже есть действие GetPatients , я бы предположил, что у вас уже есть эта модель. Используйте его.

Комментарии:

1. Это одностраничное приложение, я не использую модели в html, передача данных между сервером и клиентом должна быть json, более эффективна, чем mvc .net с точки зрения времени загрузки данных, у меня много данных. Я использую entity Framework на сервере.

2. Я исправляю это, по-видимому, оно десериализуется автоматически, я изменил string на patient , patient это класс, модель.