Il me manque quelque chose ici. J’ai ce jQuery JavaScript:
$.ajax({ type: "POST", url: "/update-note-order", dataType: "json", data: { orderedIds: orderedIds, unixTimeMs: new Date().getTime() } });
Où orderedIds
est un tableau de nombres JavaScript (par exemple, var orderedIds = [1, 2]
).
La méthode de manipulation du Controller
est la suivante:
[HttpPost] public void UpdateNoteOrder(long[] orderedIds, long unixTimeMs) { ... }
Lorsque je mets un Debugger.Break()
dans UpdateNoteOrder()
, orderedIds
est null
dans la fenêtre de surveillance. ( unixTimeMs
, cependant, a une valeur numérique.)
Comment puis-je passer le tableau de numéros via $.ajax()
telle sorte que les orderedIds
soient long[]
dans mon contrôleur?
Il suffit de définir le paramètre traditional
sur true
:
$.ajax({ type: "POST", url: "/update-note-order", dataType: "json", traditional: true, data: { orderedIds: orderedIds, unixTimeMs: new Date().getTime() } });
Depuis jquery 1.4, ce paramètre existe car le mécanisme de sérialisation des objects en parameters de requête a changé.
vous aurez besoin de transformer le paramètre commandeId en un tableau param, ou le contrôleur ne le verra pas
$.param({ orderedIds: orderedIds });
dans votre code:
$.ajax({ type: "POST", url: "/update-note-order", dataType: "json", data: { orderedIds: $.param({ orderedIds: orderedIds }), unixTimeMs: new Date().getTime() } });