即時通訊使用與MVC淘汰賽。我試圖將可觀察的對象數組從knockout傳回到我的MVC控制器操作以保存到數據庫。如果我通過ko.toJSON(viewModel.ArrayName)將數組從knockout傳遞給我的控制器操作,它會在我的控制器參數中返回爲null。如果我嘗試通過ko.toJS(viewModel.ArrayName)將它傳遞給MVC,它具有正確數量的項目,但由於某些原因數據爲空。如何做到這一點的任何幫助將受到高度讚賞。謝謝!將knockout.js的observablearray對象傳遞給MVC Controller Action?
我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());
}
}
下面是經由提琴手這就是所示的JSON數據被貼到我的MVC控制器動作,當我在傳遞{accessLevels:ko.toJSON(viewModel.AccessLevels)}控制器參數是使用在此空未來
[{"Access":[],"Id":1,"AccessLevelDesc":"TEST222"},{"Access":[],"Id":2,"AccessLevelDesc":"TEST222"}]
下面經由提琴手示出這就是被張貼到我的MVC控制器動作的JS數據,當我在傳遞{accessLevels:ko.toJS(viewModel.AccessLevels)},在此情況下,列表中有兩個成員如預期的那樣,但專家中的數據全爲空perties
accessLevels[0][Id] 1
accessLevels[0][AccessLevelDesc] TEST222
accessLevels[1][Id] 2
accessLevels[1][AccessLevelDesc] TEST222
如果我通過在一個單一的對象,以我的控制器,它工作得很好,但我似乎無法找出正確的方法從obervablearray發佈對象的數組到我的控制器回POCO實體。
什麼是JSON的形狀被張貼?要麼使用調試器來獲取此信息,要麼使用[Fiddler](http://www.fiddler2.com/fiddler2/version.asp)來捕獲它,然後使用此信息更新您的信息。謝謝! –
用請求的信息編輯我的問題。 – ccorrin
我不知道ASP.net如何處理映射,但你傳遞一個字符串到你的文章('ko.toJSON()'返回一個字符串)。這不應該是一個數組?你不應該使用'ko.toJS()'嗎? –