Sto cercando una soluzione per il POST di un array di oggetti su MVC3 tramite JSON.Pubblica una matrice di oggetti tramite JSON su ASP.Net MVC3
codice di esempio sto lavorando fuori di: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
JS:
var data = { ItemList: [ {Str: 'hi', Enabled: true} ], X: 1, Y: 2 };
$.ajax({
url: '/list/save',
data: JSON.stringify(data),
success: success,
error: error,
type: 'POST',
contentType: 'application/json, charset=utf-8',
dataType: 'json'
});
ListViewModel.cs:
public class ListViewModel
{
public List<ItemViewModel> ItemList { get; set; }
public float X { get; set; }
public float Y { get; set; }
}
ItemViewModel.cs:
public class ItemViewModel
{
public string Str; // originally posted with: { get; set; }
public bool Enabled; // originally posted with: { get; set; }
}
ListController.cs:
public ActionResult Save(ListViewModel list)
{
// Do something
}
Il risultato di questa POST:
elenco è impostato, ad un ListViewModel
sue proprietà X e Y sono impostati
La struttura ITEMLIST sottostante è impostata
L'ITEMLIST contiene un articolo, come dovrebbe
L'elemento in tale ItemList non è inizializzato. Str è nullo e Abilitato è falso.
In altre parole, questo è quello che ricevo da vincolante il modello di MVC3:
list.X == 1
list.Y == 2
list.ItemList != null
list.ItemList.Count == 1
list.ItemList[0] != null
list.ItemList[0].Str == null
Sembrerebbe il MVC3 JsonValueProvider non funziona per gli oggetti complessi. Come faccio a far funzionare questo? Devo modificare l'attuale MVC3 JsonValueProvider e correggerlo? In tal caso, come posso ottenerlo e sostituirlo in un progetto MVC3?
domandeStackOverflow correlati ho già perseguiti senza alcun risultato:
Asp.net Mvc Ajax Json (post Array) Usi MVC2 e più vecchio di codifica basata su form - questo approccio non riesce con un oggetto che contiene un array di oggetti (JQuery non riesce a codificare in modo corretto).
Post an array of complex objects with JSON, JQuery to ASP.NET MVC Controller Utilizza un trucco Vorrei evitare dove il controller riceve invece una stringa semplice che poi deserializza manualmente da sé, invece di sfruttare il framework.
MVC3 RC2 JSON Post Binding not working correctly Non ha il suo set di tipi di contenuto - è impostato nel mio codice.
How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller? Questo povero ragazzo ha dovuto scrivere un JsonFilter solo per analizzare un array. Un altro trucco che preferirei evitare.
Quindi, come posso farlo?
Aggiornamento: ho scavato in JsonValueProviderFactory. Usa correttamente la proprietà "str" e lo aggiunge al dizionario di supporto come Key = "ItemList [0] .Str", Value = "hi", che sembra corretto. ModelBinder? –
Lei, signore, ha appena ricevuto un upvote e una stella per l'eccellente esecuzione di una domanda di overflow dello stack! :) – Moulde
Anche qui, questo è stato finalmente quello che ha funzionato per me. Grazie! – Otake