2010-12-09 16 views
57

Ich vermisse etwas hier. Ich habe diese jQuery JavaScript bekam:jQuery Ajax POST-Array zu ASP.NET MVC Controller

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

Wo orderedIds ist eine JavaScript-Zahl Array (z var orderedIds = [1, 2]).

Die Handhabung Controller Methode ist:

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

Als ich in UpdateNoteOrder() ein Debugger.Break() setzen, orderedIds ist null im Fenster Watch. (unixTimeMs hat jedoch einen numerischen Wert.)

Wie gebe ich die Nummer Array durch $.ajax() so dass orderedIds ein long[] in meinem Controller ist?

Antwort

123

Einfach die traditional Parameter true:

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

Seit jquery 1.4 existiert dieser Parameter, weil der Mechanismus zu Objekte in Abfrageparameter serialisieren hat sich geändert.

+0

Leider bekomme ich in meiner Rails-Anwendung nur das letzte Element des Arrays. Ich habe überprüft, dass der Browser das Array korrekt sendet. Im obigen Beispiel habe ich 'orderedIds: orderedIds' durch' 'orderedIds []': orderedIds' ersetzt, damit es für Rails funktioniert. –

+1

"traditionell" arbeitete für mich. Vielen Dank! – Jake

+1

+1. Ein Lebensretter. – Todd

0

Sie benötigen orderedId die in eine param-Array zu drehen, oder die Steuerung wird es nicht

$.param({ orderedIds: orderedIds }); 

im Code sehen:

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

Dies funktioniert nicht. In UpdateNoteOrder ist orderedIds immer noch null. – AgileMeansDoAsLittleAsPossible

+0

Wenn es nicht funktioniert, überprüfen Sie zuerst Ihren Code, dieser stammt direkt aus der jquery-Dokumentation http://api.jquery.com/jQuery.param/ Sie möchten sichergehen, dass Sie richtig sind, bevor Sie eine Antwort ablehnen –

+0

I kann auch bestätigen, dass das nicht funktioniert (ich habe eine Beispielanwendung geschrieben, um es zu testen). –

Verwandte Themen