Wie füge ich Querystring-Werte mit der RedirectToAction-Methode hinzu?

78

In asp.net mvc verwende ich diesen Code:

RedirectToAction("myActionName");

Ich möchte einige Werte über den Querystring übergeben. Wie mache ich das?

mrblah
quelle

Antworten:

156

Alle übergebenen Werte, die nicht Teil der Route sind, werden als Querystring-Parameter verwendet:

return this.RedirectToAction
  ("myActionName", new { value1 = "queryStringValue1" });

Würden zurückkehren:

/controller/myActionName?value1=queryStringValue1

Angenommen, es gibt keinen Routenparameter mit dem Namen "value1".

Talljoe
quelle
Stimmen Sie zu, aber der Aktionsparameter mit dem Namen "Wert1" könnte vorhanden sein. Warum nicht?
Alexander Prokofyev
4
Ich denke, die Antwort bedeutete "vorausgesetzt, es gibt keinen Routenparameter mit dem Namen 'value1'". Andernfalls würde der Wert an die Stelle des Routenparameters in der generierten URL gesetzt, z. B. würde {controller} / {action} / {value1} zu / controller / myActionName / queryStringValue1 und nicht zu / controller / myActionName? Value1 = queryStringValue1.
Levi
Levi ist richtig. Ich habe die Antwort korrigiert, um zu verdeutlichen, was ich meinte.
Talljoe
4

Für Leute wie mich, die die aktuellen Querystring-Werte zur RedirectToAction hinzufügen möchten, ist dies die Lösung:

var routeValuesDictionary = new RouteValueDictionary();
Request.QueryString.AllKeys.ForEach(key => routeValuesDictionary.Add(key, Request.QueryString[key]));
routeValuesDictionary.Add("AnotherFixedParm", "true");
RedirectToAction("ActionName", "Controller", routeValuesDictionary);

Wie Sie sehen, besteht die Lösung darin, das RouteValueDictionary- Objekt zu verwenden

Pieter-Jan Van Robays
quelle
3

Machen Sie nicht den gleichen Fehler, den ich gemacht habe. Ich habe 404-Fehler behandelt und wollte mit 404=filenamein den Querystring umleiten, dh mysite.com?404=nonExistentFile.txt.

QueryString-Schlüssel können nicht mit Zahlen beginnen. Wechsel von 404zu FileNotFoundlöste mein Problem, dh mysite.com?FileNotFound=nonExistentFile.txt.

Nick
quelle
1
Dies ist im Allgemeinen nicht wahr . Dies gilt auch nicht speziell für .NET MVC (zumindest in Version 5). Denken Sie daran, dass die Tasten Zeichenfolgen sind, auch wenn sie nur aus Ziffern bestehen. Sie würden wie folgt auf eine Zifferntaste zugreifen : HttpContext.Request.QueryString["404"].
BrianS