Nous essayons d’envoyer une collection d’objects de notre page à notre contrôleur (MVC 3) à l’aide de json et de la fonction jQuery .post. Vous trouverez ci-dessous notre code js et les définitions de contrôleur et d’object.
Le problème est que, même si l’object est correctement envoyé à notre contrôleur, ses variables membres ne sont pas renseignées. La liste “Coords” contient le nombre approprié d’objects “Coord”, mais les variables de membre de chaque object Coord sont renseignées avec zéro (non nul) au lieu des valeurs que nous transmettons. Voir la capture d’écran:
Des idées sur ce qui ne va pas avec notre mise en œuvre?
Merci d’avance!
Coord1 = { "X": 100, "Y": 200 }; Coord2 = { "X": 300, "Y": 400 }; zoneData = { "Color": "#D8F834", "Name": "new zone", "Coords": [Coord1, Coord2] } $.post("/Demo/SaveZone", zoneData, function (resp) { alert(resp); }, "json"); [HttpPost] public ActionResult SaveZone(ZoneViewModel zvm) { Zone z; z = AutoMapper.Mapper.Map(zvm); _db.Zone.Attach(z); _db.SaveChanges(); return View(); } public class ZoneViewModel { public int Id { get; set; } public ssortingng Name { get; set; } public ssortingng Color { get; set; } public CoordViewModel[] Coords { get; set; } } public class CoordViewModel { public int Id { get; set; } public int X { get; set; } public int Y { get; set; } }
Le plus simple serait probablement d’utiliser une requête JSON:
var coord1 = { X: 100, Y: 200 }; var coord2 = { X: 300, Y: 400 }; var zoneData = { Color: '#D8F834', Name: 'new zone', Coords: [ coord1, coord2 ] }; $.ajax({ url: '/Demo/SaveZone', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.ssortingngify(zoneData), success: function(resp) { alert(resp); } });
La méthode JSON.ssortingngify
sérialise un object javascript dans une chaîne JSON. Il est intégré aux navigateurs modernes en tant que méthode native. Si vous souhaitez prendre en charge les navigateurs hérités ne disposant pas de cette méthode, vous devez inclure le script json2.js qui vérifie si le navigateur le prend en charge de manière native et, dans le cas contraire, il fournit une implémentation.
Maintenant tout devrait se lier correctement:
et voici à quoi ressemblera la requête réussie:
Ma conjecture:
public List Coords { get; set; }
(J’avoue que c’est un coup dans le noir)