Редактирование JSGrid: Сетка не обновляется с возвращаемым значением - PullRequest
0 голосов
/ 12 февраля 2020

Я использую компонент JSGrid для отображения и редактирования элементов из таблицы в приложении asp net core 2.2. У меня есть несколько полей, но только одно поле, которое можно редактировать. это поле состояния. это раскрывающееся поле, которое определяется как:

{ title: 'Status', name: 'status', width: 100, type: 'select', items: statusItems, valueField: 'id', textField: 'value' },

В моем JSGrid Controler у меня есть следующий код:

controller: {
            loadData: function (filter) {
                return $.ajax({
                    type: "GET",
                    url: "../Mutations/mutations?handler=Records",
                    data: filter,
                    dataType: "json"
                });
            },
            updateItem: function (item) {
                $.ajax({
                    type: "post",
                    url: '/Mutations/mutations?handler=Update',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    beforeSend: function (xhr) { xhr.setRequestHeader("X-XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); },
                    data: JSON.stringify({ MutId: item.mutId, Status: item.status }),
                    success: (function (responce) {
                        console.info(responce);  //responce is OK!
                        alert(responce.message);
                        return responce.item;    //responce.nitem wil not update the row
                    })
                });            
            }
        },

Сетка загружается нормально, когда я щелкаю по строке сетки попадает в режим редактирования и показывает выпадающий список для поля статуса, я могу выбрать другой статус. когда я фиксирую обновление, запускается код updateItem, и я получаю запрос Ajax на моем сервере. Там я проверяю, разрешено ли обновление статуса. если это разрешено, я изменяю запись и возвращаю новую запись вместе с сообщением. если изменение не разрешено, я возвращаю исходную запись вместе с сообщением, почему изменение не разрешено. На стороне клиента возвращенная запись подается как возвращаемое значение в функцию updateItem. (он имеет точно такую ​​же сигнатуру, что и каждый элемент в функции loadDate.)

Проблема сейчас в том, что я ожидаю, что строка будет обновлена ​​с возвращенными данными. но если сервер не принимает изменение и возвращается старое значение, оно не отображается в строке. (Я не могу видеть, обновляется ли строка, если изменение разрешено, потому что строка не изменится.) Кажется, я что-то упустил, но после нескольких дней недоумения я не понимаю. пожалуйста, помогите!

для ясности я добавлю свой серверный код:

 public IActionResult OnGetRecords()
        {
            var deps = _roosterService.GetUsersWithDepartmentOn(DateTime.Today);

            var Mut = from M in _DB.Mutations
                      join S in _DB.Shifts on M.ShiftId equals S.ShiftId
                      join U in _DB.RoosterUsers on M.UserId equals U.RoosterUserId
                      join D in deps on M.UserId equals D.UserId
                      join DD in _DB.Departements on D.DepartementID equals DD.DepartementId
                      select new MutationModel
                      {
                          MutId = M.MutationId,
                          Naam = U.FirstName + " " + U.LastName,
                          UserId = M.UserId,
                          Departement = DD.DepartementName,
                          MutationType = S.publicName,
                          MutationGroup = S.ShiftType.ToString(),
                          DateVan = M.DateStartOn,
                          DateTot = M.DateTill,
                          TijdVan = M.DateStartOn,
                          TijdTot = M.DateTill,
                          Status = CreateStatus(M.Tentative, M.ApprovedOn, M.Processed, M.CancelRefId, M.Deleted)
                      };

            return new JsonResult(Mut);
        }

        public IActionResult OnPostUpdate([FromBody] MutationModel model)
        {
            Mutation Mut = (from m in _DB.Mutations
                       where m.MutationId == model.MutId
                       select m).FirstOrDefault();

            string checkChange = CheckMutationStatus(Mut, model.Status);

            var deps = _roosterService.GetUsersWithDepartmentOn(DateTime.Today);

            MutationModel item = (from M in _DB.Mutations
                                    where M.MutationId == model.MutId
                                    join S in _DB.Shifts on M.ShiftId equals S.ShiftId
                                    join U in _DB.RoosterUsers on M.UserId equals U.RoosterUserId
                                    join D in deps on M.UserId equals D.UserId
                                    join DD in _DB.Departements on D.DepartementID equals DD.DepartementId
                                    select new MutationModel
                                    {
                                        MutId = M.MutationId,
                                        Naam = U.FirstName + " " + U.LastName,
                                        UserId = M.UserId,
                                        Departement = DD.DepartementName,
                                        MutationType = S.publicName,
                                        MutationGroup = S.ShiftType.ToString(),
                                        DateVan = M.DateStartOn,
                                        DateTot = M.DateTill,
                                        TijdVan = M.DateStartOn,
                                        TijdTot = M.DateTill,
                                        Status = CreateStatus(M.Tentative, M.ApprovedOn, M.Processed, M.CancelRefId, M.Deleted)
                                    }).FirstOrDefault();

            response Resp = new response();
            Resp.item = item;
            Resp.message = checkChange;
            return new JsonResult(Resp);
        }
...