J’essaie et ai du mal à envoyer un tableau via JSON à une action de contrôleur MVC.
Voici ce que j’ai et ce que j’ai essayé …
//Get checked records var $checkedRecords = $(':checked'); //eg 3 rows selected = [input 4, input 5, input 6] //Have sortinged following: sendingVar: $checkedRecords.serializeArray(); // gives array of 0's sendingVar: JSON.ssortingngify($checkedRecords); // gives "{\"length\":1,\"prevObject\":{\"0\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"length\":1},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"selector\":\":checked\",\"0\":{}}"...wtf //Post $.post(url, { sendingVar: sendingVar }, function(data) {alert(data); });
Comment fait-on ça ?
edit: à ceux qui suggèrent d’envoyer $checkedRecords
“tel $checkedRecords
” à partir de la ligne supérieure – cela ne fonctionne pas. Je reçois une étrange exception quelque part dans le cadre de jquery 🙁
uncaught exception: [Exception... "Could not convert JavaScript argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://.../.../.../jquery-1.4.4.min.js :: :: line 141" data: no]
ce qui, je pense, signifie qu’il tente d’assigner la valeur null à quelque chose qu’il ne peut pas.
Edit: J’utilise MVC2 pas 3
Edit2: Après la réponse de @ Monday, le problème est dû à la façon dont j’ai construit le tableau, comme [input 4, input 5, input 6]
et non à [4,5,6]
. tableau à la place?
Edit3: Arrêtez de voter en double lorsque ce n’est pas le cas. Avez-vous réellement lu mon problème ou lu les problèmes liés? c’est un problème différent
@Daveo:
Je ne souhaite pas créer un atsortingbut personnalisé redondant uniquement pour envoyer un tableau à partir de JSON, ce qui est d’autant plus ridicule que nous en avons déjà parlé dans cette question. Ce n’est pas nécessaire.
MVC3 – non pertinent
Voici ma démo, utilisez mvc2, espérons que cela vous aidera ~
La clé du succès est traditionnelle
définir le paramètre traditional
sur true
$(function(){ var a = [1, 2]; $.ajax({ type: "POST", url: "<%= ResolveUrl("~/Home/PostArray/") %>", data: {orderedIds: a}, dataType: "json", traditional: true, success: function(msg){alert(msg)} }); })
Depuis jquery 1.4, ce paramètre existe car le mécanisme de sérialisation des objects dans les parameters de requête a changé.
et l’action est ~
[HttpPost] public ActionResult PostArray(int[] orderedIds) { return Content(orderedIds.Length.ToSsortingng()); }
vous pouvez également utiliser JSON.ssortingngyfy
pour envoyer les données sous forme de chaîne, puis utiliser la JavaScriptSerializer class
pour récupérer les données.
En code C #, pour obtenir les données, ressemblera à ceci:
JavaScriptSerializer js = new JavaScriptSerializer(); js.Deserialize(ssortingng paramiter);