In asp.net mvc, I am using this code:
RedirectToAction(\"myActionName\");
I want to pass some values via the querystring, how do I do that?
For people like me who were looking to add the CURRENT querystring values to the RedirectToAction, this is the solution:
var routeValuesDictionary = new RouteValueDictionary();
Request.QueryString.AllKeys.ForEach(key => routeValuesDictionary.Add(key, Request.QueryString[key]));
routeValuesDictionary.Add("AnotherFixedParm", "true");
RedirectToAction("ActionName", "Controller", routeValuesDictionary);
The solution as you can see is to use the RouteValueDictionary object
Any values that are passed that aren't part of the route will be used as querystring parameters:
return this.RedirectToAction
("myActionName", new { value1 = "queryStringValue1" });
Would return:
/controller/myActionName?value1=queryStringValue1
Assuming there's no route parameter named "value1".
Also consider using T4MVC, which has the extension methods AddRouteValue()
and AddRouteValues()
(as seen on this question on setting query string in redirecttoaction).
Do not make the same mistake I was making. I was handling 404 errors and wanted to redirect with 404=filename
in the querystring, i.e. mysite.com?404=nonExistentFile.txt
.
QueryString Keys cannot begin with numbers. Changing from 404
to FileNotFound
solved my issue, i.e. mysite.com?FileNotFound=nonExistentFile.txt
.