将knockout.js observalearray对象传递给MVC控制器操作



Im使用MVC的敲除。我试图将一个可观察到的对象数组从敲除传递回我的MVC控制器操作,以便保存到数据库中。如果我通过ko.toJSON(viewModel.ArrayName)将数组从敲除传递给我的控制器操作,它在我的控制器参数中返回为null。如果我试图通过ko.toJS(viewModel.ArrayName)将其传递给MVC,它有正确数量的项,但由于某种原因,数据为空。如能提供任何帮助,我们将不胜感激。谢谢

My 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);
}

当试图在此控制器方法上从Knockout传入参数时,该参数返回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());
}
}

以下是通过fiddler显示的JSON数据,当我传入{accessLevels:ko.toJSON(viewModel.accessLevels)}时,该数据被发布到我的MVC控制器操作中。使用此,控制器参数为null

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

下面是通过fiddler显示的JS数据,当我传入{accessLevels:ko.toJS(viewModel.accessLevels)}时,它被发布到我的MVC控制器操作中,在这种情况下,列表中有两个成员,但属性中的数据都为空

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

如果我把一个对象传递给我的控制器,它会很好地工作,但我似乎无法找到将对象数组从obervablarray发布到我的控制器并返回到POCO实体的正确方法。

尝试通过指定正确的请求Content-Type标头将其作为JSON请求发送:

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

最新更新