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?
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?
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".
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
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
.
If you already have a query string from somewhere, you can skip parsing and reassembling the query string and just use Redirect
with Url.Action
:
string queryString ="?param1=xxx&page=5";
return Redirect(Url.Action("MyAction") + queryString);
Redirect("myAction/" + Request.QueryString);