Я использую компонент 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);
}