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

Posted

技术标签:

【中文标题】如何使用 RedirectToAction 方法添加查询字符串值?【英文标题】:how to add querystring values with RedirectToAction method? 【发布时间】:2010-11-07 05:18:48 【问题描述】:

在asp.net mvc中,我使用的是这段代码:

RedirectToAction("myActionName");

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

【问题讨论】:

【参考方案1】:

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

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

会返回:

/controller/myActionName?value1=queryStringValue1

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

【讨论】:

同意,但名称为“value1”的操作参数可能存在。为什么不呢? 我认为答案的意思是“假设没有名为'value1'的路由参数”。否则,该值将进入生成 URL 中路由参数的位置,例如controller/action/value1 将变为 /controller/myActionName/queryStringValue1 而不是 /controller/myActionName?value1=queryStringValue1。 列维是正确的。我已经确定了答案以澄清我的意思。【参考方案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 对象

【讨论】:

【参考方案3】:

还可以考虑使用T4MVC,它具有扩展方法AddRouteValue()AddRouteValues()(如setting query string in redirecttoaction 上的这个问题所示)。

【讨论】:

【参考方案4】:

不要重蹈我的覆辙。我正在处理 404 错误并想在查询字符串中使用404=filename 重定向,即mysite.com?404=nonExistentFile.txt

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

【讨论】:

这不是generally true。 .NET MVC(至少在 v5 中)也不是这样。请记住,键是字符串,即使它只包含数字。您可以按如下方式访问数字键:HttpContext.Request.QueryString["404"].

以上是关于如何使用 RedirectToAction 方法添加查询字符串值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 6 中继续使用 ModelState 和 RedirectToAction?

如何在 asp.net MVC 中使用 RedirectToAction 将模型从一个 Action 方法传递到另一个?尽管我发送了一个填充模型,但我得到的是空模型

使用 RedirectToAction 方法时视图内容不刷新

使用 RedirectToAction 时如何跳过控制器名称?

如何強迫指定RedirectToAction 為POST

ASP.NET-RedirectToAction只能使用get方法