Je cherche une solution pour envoyer un tableau d'objets à MVC3 via JSON.
Exemple de code sur lequel je travaille : 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
}
Le résultat de ce POST :
est définie, à un ListViewModel
Ses propriétés X et Y sont définies
La propriété sous-jacente ItemList est définie
La liste d'éléments contient un élément, comme il se doit.
L'élément de cette ItemList n'est pas initialisé. Str est null et Enabled est false.
En d'autres termes, voici ce que j'obtiens de la liaison de modèle de MVC3 :
list.X == 1
list.Y == 2
list.ItemList != null
list.ItemList.Count == 1
list.ItemList[0] != null
list.ItemList[0].Str == null
Il semblerait que le JsonValueProvider de MVC3 ne fonctionne pas pour les objets complexes. Comment faire pour que cela fonctionne ? Dois-je modifier le JsonValueProvider MVC3 existant et le corriger ? Si oui, comment puis-je l'atteindre et le remplacer dans un projet MVC3 ?
Questions connexes sur StackOverflow que j'ai déjà traitées en vain :
Asp.net Mvc Ajax Json (post Array) Utilise MVC2 et l'ancien encodage basé sur le formulaire - cette approche échoue avec un objet qui contient un tableau d'objets (JQuery ne parvient pas à l'encoder correctement).
Poster un tableau d'objets complexes avec JSON, JQuery à ASP.NET MVC Controller Utilise un hack que j'aimerais éviter, où le contrôleur reçoit une simple chaîne de caractères qu'il désérialise manuellement lui-même, plutôt que d'utiliser le framework.
MVC3 RC2 JSON Post Binding ne fonctionne pas correctement Son type de contenu n'est pas défini, il l'est dans mon code.
Comment poster un tableau d'objets complexes avec JSON, jQuery à ASP.NET MVC Controller ? Ce pauvre type a dû écrire un JsonFilter juste pour analyser un tableau. Un autre hack que je préférerais éviter.
Alors, comment faire pour que ça arrive ?