我正在使用knockout和MVC。我想将一个可观察的对象数组从knockout传回我的MVC控制器动作,以保存到数据库中。如果我通过ko.toJSON(viewModel.ArrayName)将数组从knockout传递到我的控制器动作,它在我的控制器参数中返回null。如果我尝试通过ko.toJS(viewModel.ArrayName)将其传递到MVC,它具有正确的项目数量,但由于某种原因数据为null。如何实现这一点的任何帮助都将不胜感激。谢谢!
我使用的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控制器操作中,但控制器参数为空。
[{"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
如果我将单个对象传递给控制器,它可以正常工作,但是我似乎无法弄清楚如何正确地将ObservableArray中的对象数组从控制器重新提交到POCO实体。
ko.toJSON()
返回一个字符串)。那不应该是一个数组吗?你不应该使用ko.toJS()
吗? - Jeff MercadoIEnumerable<AccessLevel> accessLevels
吗? - Kyeotic