Post Array en tant que JSON au contrôleur MVC
J'ai eu du mal à trouver une solution à ce problème.
Dans mon code, je fais construire un tableau d'un objet;
var $marks = [];
var mark = function ( x, y, counter ){
this.x = x;
this.y = y;
this.counter = counter;
}
$marks.push(new mark(1, 2, 0));
$marks.push(new mark(1, 2, 1));
$marks.push(new mark(1, 2, 2));
Maintenant, je veux afficher ces données à un contrôleur MVC, donc je pense que le type de données dans le contrôleur serait un List<Mark> Marks
ou un tableau de Marques.
Pour afficher les données, j'ai essayé;
var json = JSON.stringify($marks);
$.post('url', json).done(function(data){ /* handle */ });
OU
var json = { Marks: $marks };
$.post('url', json).done(function(data){ /* handle */ });
La deuxième façon, lorsque l'on regarde les données affichées, ressemble à ce
Marks[0][x]: 1
Marks[0][y]: 2
Marks[0][counter]: 0
Marks[0][x]: 1
Marks[0][y]: 2
Marks[0][counter]: 1
Marks[0][x]: 1
Marks[0][y]: 2
Marks[0][counter]: 2
Mais je ne suis pas sûr de savoir comment le traduire dans un objet fortement typé dans le contrôleur?
Mon Contrôleur ressemble à ceci;
[HttpPost]
public ActionResult JsonSaveMarks(List<Mark> Marks){
//handle here
}
Ma Marque de classe ressemble à ceci;
public class Mark{
public string x { get; set; }
public string y { get; set; }
public string counter { get; set; }
}
J'ai lu à travers d'autres problèmes similaires sur la création d'une coutume JsonFilterAttributeou à l'aide de la Système.Web.Script.La sérialisation.JavaScriptSerializer classe, mais je ne peux pas obtenir quoi que ce soit pour le travail
Est là quelque chose d'évident, je suis absent ici? J'ai obtenu le Type de données dans le contrôleur complètement tort? Comment puis-je convertir ces données affichées dans un objet fortement typé?
Merci Beaucoup
source d'informationauteur Tim B James
Vous devez vous connecter pour publier un commentaire.
$.post()
ne vous permettra pas de définir le type de contenu de votre appel AJAX - vous pourriez trouver (si vous utilisez Fiddler) que votre chaîne Json est envoyé avec un content-type "application/x-www-form-urlencoded" (réglage par défaut) ce qui provoque alors Asp.Net MVC mal interpréter votre paquet de données.Pouvez-vous essayer d'utiliser
$.ajax()
au lieu de cela, et de définir le type de contenu "application/json"?http://api.jquery.com/jQuery.ajax/
@SteveHobbs a le droit de répondre ici. D'autre part, vous devriez
JSON.stringify
le JavaScript de la charge utile, comme vous l'avez fait. Si vous le faites dans l'autre sens, vous aurez une exception dire quelque chose comme "Invalid JSON primitive" alors que la désérialisation des données.Voici la solution complète pour votre échantillon:
Ce code fixe mon problème:
Classes C#:
MVC action:
Javascript:
Faire les changements dont vous avez besoin pour votre scénario et profitez-en! 🙂