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?

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".


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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.