Ich versuche, ein Array (oder IEnumerable) von Ints über AJAX an eine MVC-Aktion zu übergeben, und ich benötige ein wenig Hilfe.
Das Javascript ist
$.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...
und die Controller-Aktion ist
public ActionResult MyAction(IEnumerable<int> arrayOfValues )
Im Moment ist die Anfrage als formatiert
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437
Ich bin also fast da, wenn ich die eckigen Klammern abnehme, bekomme ich die richtige Antwort. Wie soll ich dieses Array an mein get übergeben, damit der Controller erkennen kann, was es ist?
Vielen Dank für deine Hilfe
Dave
c#
asp.net-mvc
jquery
Dave
quelle
quelle
Ich hatte in der Vergangenheit Probleme beim Versuch, einen POST durchzuführen (nicht sicher, ob Sie genau das tun, aber ich erinnere mich, dass beim Übergeben eines Arrays traditionell auf true gesetzt werden muss .
quelle
Eine ziemlich späte, aber andere Antwort als die hier bereits vorhandenen:
Wenn Sie anstelle von
$.ajax
Kurzfunktionen$.get
oder verwenden möchten$.post
, können Sie Arrays folgendermaßen übergeben:Kurzschrift GET
Kurzschrift POST
Anmerkungen:
$.param
ist für dietraditional
Eigenschaft, die sein muss,true
damit dies funktioniert .quelle
Sie sollten in der Lage sein, dies ganz gut zu tun:
Dann wäre Ihre Aktionsmethode wie folgt:
Für Sie sieht es so aus, als müssten Sie nur Ihre Werte stringifizieren. Der JSONValueProvider in MVC konvertiert dies zurück in einen IEnumerable für Sie.
quelle
Die Antwort auf die Option "traditionell" ist richtig. Ich biete nur einige weitere Hintergrundinformationen für diese, die mehr erfahren möchten.
Aus der jQuery-Dokumentation:
Sie können auch hier mehr lesen: http://michaelsync.net/2012/04/05/tips-asp-net-mvc-javascriptserializer-3-questions-and-3-answers und http://haacked.com/archive /2008/10/23/model-binding-to-a-list.aspx
HTH
quelle
WENN ALLE STRICKE REISSEN...
Keine der anderen Antworten hier hat mein Problem gelöst. Ich habe versucht, einen GET-Methodenaufruf von JavaScript an einen MVC-Web-API-Controller durchzuführen und ein Array von Ganzzahlen als Parameter innerhalb dieser Anforderung zu senden. Ich habe alle Lösungen hier ausprobiert, aber der Parameter auf meinem Controller wurde immer noch NULL angezeigt (oder Nothing for you VB-Benutzer).
Ich fand meine Lösung schließlich in einem anderen SO-Beitrag , und es war eigentlich ganz einfach: Fügen Sie einfach die
[FromUri]
Anmerkung vor dem Array-Parameter im Controller hinzu ( ich musste den Aufruf auch mit der "traditionellen" AJAX-Einstellung tätigen, um Klammeranmerkungen zu vermeiden ). Unten finden Sie den tatsächlichen Code, den ich in meiner Anwendung verwendet habe.Controller-Signatur:
HINWEIS: Die Anmerkung in C # wäre
[FromUri]
JavaScript:
Aktuelle URL-Zeichenfolge:
quelle
Ein bisschen spät hier, aber ich könnte die SNag-Lösung weiter in $ .ajax () verwenden. Hier ist der Code, wenn er jemandem helfen würde:
quelle
Wenn Sie wie ich von .Net Framework MVC auf ASP.NET Core MVC migrieren, haben sich die Dinge geringfügig geändert. Der Ajax-Aufruf muss sich mit stringify auf dem Rohobjekt befinden, damit die Daten
{ vals: arrayOfValues }
nichtJSON.stringify(arrayOfValues)
wie folgt übergeben werden:Die andere Änderung, die in ASP.NET Core vorgenommen wurde, besteht darin, die Fälschung von standortübergreifenden Anforderungen zu verhindern. Bei Aufrufen einer MVC-Aktion von einer Ajax-Methode
[FromBody]
muss das Attribut wie folgt auf den Aktionsparameter angewendet werden:quelle
Wenn Sie ASP.NET Core MVC verwenden und die eckigen Klammern verwenden müssen (anstatt die "traditionelle" jQuery-Option zu verwenden), habe ich nur die Option gefunden, die
IEnumerable
in der Contoller-Methode manuell zu erstellen.quelle
Ich arbeite mit asp.net Core 2.2 und jquery und muss ein komplexes Objekt ('Hauptklasse') aus einer Sicht an einen Controller mit einfachen Datenfeldern und einigen Arrays senden.
Sobald ich das Array in der c # -Definition 'Hauptklasse' hinzugefügt habe (siehe unten) und das (korrekt gefüllte) Array über Ajax (Post) gesendet habe, war das gesamte Objekt im Controller null.
Zuerst dachte ich, das fehlende "traditionell: wahr" für meinen Ajax-Aufruf sei der Grund, aber das ist nicht der Fall.
In meinem Fall war der Grund die Definition in der c # 'Hauptklasse'.
In der 'Hauptklasse' hatte ich:
und EreignisTagNeu wurde definiert als:
Ich musste die Definition in der 'Hauptklasse' ändern in:
Jetzt gehts.
Also ... für mich scheint es, dass der asp.net-Kern ein Problem hat (mit post), wenn die Liste für ein Array nicht vollständig in der 'Hauptklasse' definiert ist.
Hinweis: In meinem Fall funktioniert dies mit oder ohne "traditionell: wahr" für den Ajax-Aufruf
quelle
Sie müssen Array in String konvertieren:
Dies funktioniert sogar in Form von int, long oder string
quelle