mrblah
mrblah

Reputation: 103487

how to add querystring values with RedirectToAction method?

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

Answers (6)

Bagher Hakim
Bagher Hakim

Reputation: 1

Redirect("myAction/" + Request.QueryString);

Upvotes: 0

Alex from Jitbit
Alex from Jitbit

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

Pieter-Jan Van Robays
Pieter-Jan Van Robays

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

Martin_W
Martin_W

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

Nick
Nick

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

Talljoe
Talljoe

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

Related Questions