如何使用RedirectToAction方法添加查询字符串值?


78

在asp.net mvc中,我正在使用以下代码:

RedirectToAction("myActionName");

我想通过查询字符串传递一些值,我该怎么做?

Answers:


155

传递的不属于路由的任何值都将用作查询字符串参数:

return this.RedirectToAction
  ("myActionName", new { value1 = "queryStringValue1" });

将返回:

/controller/myActionName?value1=queryStringValue1

假设没有名为“ value1”的路由参数。


同意,但是可能存在名称为“ value1”的操作参数。为什么不?
亚历山大·普罗科菲耶夫

4
我认为答案的意思是“假设没有名为'value1'的路由参数”。否则,该值将进入生成的URL中路由参数的位置,例如{controller} / {action} / {value1}将变为/ controller / myActionName / queryStringValue1而不是/ controller / myActionName?value1 = queryStringValue1。

列维是正确的。我已经确定答案,以澄清我的意思。
2009年


2

不要犯与我相同的错误。我正在处理404错误,并想使用404=filenamequerystring重定向,即mysite.com?404=nonExistentFile.txt

QueryString键不能以数字开头。从更改404FileNotFound解决了我的问题,即mysite.com?FileNotFound=nonExistentFile.txt


1
通常情况并非如此。专门针对.NET MVC(至少在v5中)的情况也不是这样。只需记住,键是字符串,即使它仅由数字组成。您将按以下方式访问数字键:HttpContext.Request.QueryString["404"]
BrianS

2

对于像我这样希望将CURRENT查询字符串值添加到RedirectToAction的人,这是解决方案:

var routeValuesDictionary = new RouteValueDictionary();
Request.QueryString.AllKeys.ForEach(key => routeValuesDictionary.Add(key, Request.QueryString[key]));
routeValuesDictionary.Add("AnotherFixedParm", "true");
RedirectToAction("ActionName", "Controller", routeValuesDictionary);

如您所见,解决方案是使用RouteValueDictionary对象

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.