Im utilizzando knockout con MVC. Sto cercando di passare una serie osservabile di oggetti dal knockout all'azione del mio controller MVC per salvarli nel database. Se passerò l'array da knockout all'azione del mio controller tramite ko.toJSON (viewModel.ArrayName) tornerà come null nel parametro del mio controller. Se provo a passarlo a MVC tramite ko.toJS (viewModel.ArrayName) ha il numero corretto di elementi ma i dati sono nulli per qualche motivo. Qualsiasi aiuto su come farlo sarebbe apprezzato in maniera grezza. Grazie!Passaggio di oggetto observablearray knockout.js all'azione del controller MVC?
mio JQuery di reperimento dei dati Metodo:
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);
});
}
Questo è il metodo problema:
updateAccessLevels = function() {
$.post('/DataService/UpdateAccessLevels', { accessLevels: ko.toJSON(viewModel.AccessLevels) }, function (status) {
alert(status);
});
}
mia azione MVC controller di reperimento dei dati:
[HttpPost]
public ActionResult GetAccessLevelList()
{
FacilityAccessViewModel viewModel = new FacilityAccessViewModel();
viewModel.AccessLevels = unitOfWork.AccessLevelRepository.Get().ToList();
return Json(viewModel);
}
Il parametro restituisce NULL o con dati NULL quando tenta di passarlo da Knockout su questo metodo di controller.
[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());
}
}
Di seguito i dati JSON mostrati tramite questo è violinista di essere inviati ad mia MVC azione di controllo quando passo in {accessLevels: ko.toJSON (viewModel.AccessLevels)} il parametro di controllo è in arrivo nel nulla con questo
[{"Access":[],"Id":1,"AccessLevelDesc":"TEST222"},{"Access":[],"Id":2,"AccessLevelDesc":"TEST222"}]
Qui di seguito sono i dati JS mostrati tramite violinista questo è di essere pubblicati alla mia MVC azione di controllo quando passo in {accessLevels: ko.toJS (viewModel.AccessLevels)}, in questo caso la lista ha due membri come previsto, ma i dati sono tutti nulli nel pro prietà
accessLevels[0][Id] 1
accessLevels[0][AccessLevelDesc] TEST222
accessLevels[1][Id] 2
accessLevels[1][AccessLevelDesc] TEST222
Se mi passa in un unico oggetto al mio controller funziona bene, ma non posso sembra di capire il modo corretto per inviare un array di oggetti per il mio controller da un obervablearray di nuovo ad un POCO entità.
Qual è la forma del JSON che viene pubblicato? Utilizza il debugger per ottenere questo o usa [Fiddler] (http://www.fiddler2.com/fiddler2/version.asp) per catturarlo, quindi aggiorna il tuo post con queste informazioni. Grazie! –
Modificato le mie domande sopra con le informazioni richieste. – ccorrin
Non so come ASP.net gestisca i mapping ma si passa una stringa al proprio post ('ko.toJSON()' restituisce una stringa). Non dovrebbe essere un array? Non dovresti usare 'ko.toJS()'? –