Ich habe einen ASP.net MVC-Controller namens Designs
, der eine Aktion mit der folgenden Signatur hat:
public ActionResult Multiple(int[] ids)
Wenn ich jedoch versuche, mithilfe der URL zu dieser Aktion zu navigieren:
http://localhost:54119/Designs/Multiple?ids=24041,24117
Der ids
Parameter ist immer null. Gibt es eine Möglichkeit, MVC dazu zu bringen, den ?ids=
URL-Abfrageparameter in ein Array für die Aktion zu konvertieren ? Ich habe die Rede von der Verwendung eines Aktionsfilters gesehen, aber soweit ich das beurteilen kann, funktioniert dies nur für POSTs, bei denen das Array in den Anforderungsdaten und nicht in der URL selbst übergeben wird.
quelle
[FromUri]
.public ActionResult Multiple([FromUri]int[] ids) {}
(GET)Um die Antwort von Darin Dimitrov zu erweitern , können Sie einen einfachen
string
Parameter in Ihrer URL akzeptieren und selbst in ein Array konvertieren:Wenn Sie dabei einen Analysefehler erhalten (weil Ihnen jemand ein fehlerhaftes Array übergeben hat), kann Ihr Ausnahmebehandler einen
400 Bad Request
Fehler anstelle des standardmäßigen, unfreundlicheren404 Not Found
Fehlers zurückgeben, den MVC zurückgibt, wenn kein Endpunkt gefunden wird.quelle
Sie können auch dieses URL-Format verwenden, und ASP.NET MVC erledigt alles für Sie. Denken Sie jedoch daran, die URL-Codierung anzuwenden.
quelle
Ich weiß nicht, woher Grokys URL-Zeichenfolge stammt, aber ich hatte das gleiche Problem mit einem Javascript, das meinen Controller / meine Aktion aufruft. Es würde eine URL von
null
, 1 oder vielen "IDs" aus einer Mehrfachauswahlliste erstellen (was nur für die Lösung gilt, die ich freigeben werde).Ich habe Darins benutzerdefinierten Modellordner kopiert / eingefügt und meine Aktion / meinen Parameter dekoriert, aber es hat nicht funktioniert. Ich wurde immer noch
null
geschätztint[] ids
. Selbst in dem "sicheren" Fall, in dem ich tatsächlich viele Ausweise hatte.Am Ende habe ich das Javascript geändert, um ein ASP.NET MVC-freundliches Parameterarray wie zu erzeugen
Ich musste allerdings ein paar dumme Sachen machen
Also war der ganze Block
Es ist chaotisch, aber es ist das erste Mal, dass ich so in Javascript hacken musste.
quelle