Передача объекта knockout.js observablearray в действие контроллера MVC?
Я использую нокаут с MVC. Я пытаюсь передать наблюдаемый массив объектов из нокаута обратно в действие контроллера MVC для сохранения в базе данных. Если я передаю массив из нокаута в действие моего контроллера через ko.toJSON (viewModel.ArrayName), он возвращается как ноль в параметре моего контроллера. Если я пытаюсь передать его в MVC через ko.toJS (viewModel.ArrayName), он имеет правильное количество элементов, но данные по какой-то причине являются нулевыми. Любая помощь в том, как это сделать, будет с благодарностью принята. Спасибо!
Мой метод получения данных JQuery:
var dataService = {};
var viewModel;
$(document).ready(function () {
dataService.getAccessLevelList();
})
dataService.getAccessLevelList = function () {
$.post('/DataService/GetAccessLevelList', null, function (data) {
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
});
}
Это метод проблемы:
updateAccessLevels = function () {
$.post('/DataService/UpdateAccessLevels', { accessLevels: ko.toJSON(viewModel.AccessLevels) }, function (status) {
alert(status);
});
}
Действие моего извлечения данных контроллера MVC:
[HttpPost]
public ActionResult GetAccessLevelList()
{
FacilityAccessViewModel viewModel = new FacilityAccessViewModel();
viewModel.AccessLevels = unitOfWork.AccessLevelRepository.Get().ToList();
return Json(viewModel);
}
Параметр возвращается NULL или с данными NULL при попытке передать его из Knockout в этом методе контроллера.
[HttpPost]
public ActionResult UpdateAccessLevels(List accessLevels)
{
try
{
foreach (AccessLevel record in accessLevels)
{
unitOfWork.AccessLevelRepository.Update(record);
}
unitOfWork.Save();
return Json("SUCCESS");
}
catch (Exception ex)
{
return Json(ex.ToString());
}
}
Ниже приведены данные JSON, отображаемые через fiddler, которые публикуются в моем действии контроллера MVC, когда я передаю {accessLevels: ko.toJSON (viewModel.AccessLevels)} параметр контроллера, равный нулю, используя этот
[{"Access":[],"Id":1,"AccessLevelDesc":"TEST222"},{"Access":[],"Id":2,"AccessLevelDesc":"TEST222"}]
Ниже приведены данные JS, отображаемые с помощью fiddler, которые публикуются в моем действии контроллера MVC, когда я передаю {accessLevels: ko.toJS (viewModel.AccessLevels)}, в этом случае в списке, как и ожидалось, два члена, но все данные равны нулю в свойствах
accessLevels[0][Id] 1
accessLevels[0][AccessLevelDesc] TEST222
accessLevels[1][Id] 2
accessLevels[1][AccessLevelDesc] TEST222
Если я передаю один объект моему контроллеру, он работает просто отлично, но я не могу найти правильный способ отправки массива объектов на мой контроллер из obervablearray обратно в объект POCO.