2010-12-09 53 views
57

Il me manque quelque chose ici. J'ai ce JavaScript jQuery:jQuery Ajax tableau POSTing au contrôleur ASP.NET MVC

$.ajax({ 
    type: "POST", 
    url: "/update-note-order", 
    dataType: "json", 
    data: { 
     orderedIds: orderedIds, 
     unixTimeMs: new Date().getTime() 
    } 
}); 

orderedIds est un tableau de nombres JavaScript (par exemple var orderedIds = [1, 2]).

La manipulation méthode Controller est:

[HttpPost] 
public void UpdateNoteOrder(long[] orderedIds, long unixTimeMs) 
{ 
    ... 
} 

Quand je mets un Debugger.Break() dans UpdateNoteOrder(), orderedIds est null dans la fenêtre Espion. (unixTimeMs, cependant, a une valeur numérique.)

Comment puis-je passer le tableau de nombres à travers $.ajax() tel que orderedIds est un long[] dans mon contrôleur?

Répondre

123

Il suffit de régler le paramètre traditional à 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 parce que le mécanisme de sérialiser les objets dans les paramètres de requête a changé.

+0

Malheureusement, dans mon application Rails, je n'ai que le dernier élément du tableau. J'ai vérifié que le navigateur envoie le tableau correctement. Dans l'exemple ci-dessus, j'ai remplacé 'orderedIds: orderedIds' par' 'orderedIds [] ': orderedIds' pour le faire fonctionner pour Rails. –

+1

"traditionnel" a travaillé pour moi. Merci! – Jake

+1

+1. Un sauveteur. – Todd

0

vous aurez besoin de tourner de orderedId dans un tableau param, ou le contrôleur ne le verrez 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() 
    } 
}); 
+2

Cela ne fonctionne pas. Dans UpdateNoteOrder, orderedIds est toujours null. – AgileMeansDoAsLittleAsPossible

+0

si cela ne fonctionne pas, vérifiez d'abord votre code, ceci est pris directement à partir de la documentation de jquery http://api.jquery.com/jQuery.param/ Vous voudrez peut-être vous assurer que vous avez raison avant de rejeter une réponse –

+0

I Je peux aussi confirmer que cela ne fonctionne pas (j'ai écrit un exemple d'application pour le tester). –