Reputation: 103487
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?
Upvotes: 94
Views: 86555
Reputation: 60566
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);
Upvotes: 0
Reputation: 552
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
Upvotes: 14
Reputation: 1787
Also consider using T4MVC, which has the extension methods AddRouteValue()
and AddRouteValues()
(as seen on this question on setting query string in redirecttoaction).
Upvotes: 4
Reputation: 886
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
.
Upvotes: 3
Reputation: 14827
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".
Upvotes: 196