Подтвердить что ты не робот

Передача объекта knockout.js Obsablearray для действия контроллера MVC?

Im использует нокаут с MVC. Я пытаюсь передать наблюдаемый массив объектов от нокаута обратно к моему действию контроллера MVC для сохранения в базе данных. Если я передам массив с нокаутом на мое действие контроллера через ko.toJSON(viewModel.ArrayName), он возвращается как null в мой параметр контроллера. Если я попытаюсь передать его 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);
    });
}

My MVC Controller Data Retrieval:

    [HttpPost]
    public ActionResult GetAccessLevelList()
    {
        FacilityAccessViewModel viewModel = new FacilityAccessViewModel();
        viewModel.AccessLevels = unitOfWork.AccessLevelRepository.Get().ToList();
        return Json(viewModel);
    }

Параметр возвращается NULL или с данными NULL при попытке передать его из нокаута по этому методу контроллера.

    [HttpPost]
    public ActionResult UpdateAccessLevels(List<AccessLevel> accessLevels)
    {
        try
        {
            foreach (AccessLevel record in accessLevels)
            {
                unitOfWork.AccessLevelRepository.Update(record);
            }

            unitOfWork.Save();
            return Json("SUCCESS");
        }
        catch (Exception ex)
        {
            return Json(ex.ToString());
        }
    }

Ниже приведены данные JSON, показанные с помощью скрипача, который отправляется в мое действие контроллера MVC, когда я передаю {accessLevels: ko.toJSON(viewModel.AccessLevels)} параметр контроллера приходит в нуле, используя этот

[{"Access":[],"Id":1,"AccessLevelDesc":"TEST222"},{"Access":[],"Id":2,"AccessLevelDesc":"TEST222"}]

Ниже приведены данные JS, показанные с помощью скрипача, который отправляется в действие моего контроллера MVC, когда я передаю {accessLevels: ko.toJS(viewModel.AccessLevels)}, в этом случае список имеет два члена, как ожидалось, но все данные имеют нулевое значение в свойствах

accessLevels[0][Id] 1
accessLevels[0][AccessLevelDesc]    TEST222
accessLevels[1][Id] 2
accessLevels[1][AccessLevelDesc]    TEST222

Если я передаю один объект моему контроллеру, он работает нормально, но я не могу найти подходящий способ опубликовать массив объектов для моего контроллера из obervablearray обратно в объект POCO.

4b9b3361

Ответ 1

Попробуйте отправить его как запрос JSON, указав правильный заголовок Content-Type запроса:

updateAccessLevels = function () {
    $.ajax({
        url: '/DataService/UpdateAccessLevels', 
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: ko.toJSON(viewModel.AccessLevels),
        success: function(status) {
            alert(status);
        }
    });
};