【问题标题】:Send Query String in RedirectToAction MVC在 RedirectToAction MVC 中发送查询字符串
【发布时间】:2016-08-25 10:23:48
【问题描述】:

我在下面的控制器中有两个动作方法-

public class VisitMasterController 
{
    public ActionResult StartBrVisit()
    {
        string id=(Request.QueryString["id"].ToString(); //value=null here
    }

    public ActionResult BrNotPresent()
    {
         return RedirectToAction("StartBrVisit","VisitMaster" , new { id = "id", name = "name" });
    }
{ 

重定向后,Request.QueryString["id"] 返回 null。

我的默认路由配置是-

         context.MapRoute(
         "BR_default",
         "BR/{controller}/{action}/{id}",
         new { action = "Index", id = UrlParameter.Optional },
         new[] { "OpinionLeader.Areas.BR.Controllers" } //add this line
     );

有什么帮助吗?

【问题讨论】:

  • 您是否使用.../{id} 的默认路由?为什么不直接使用public ActionResult StartBrVisit(int id)
  • @StephenMuecke - 是的,有一个名为 id 的默认路由。我已经更新了我的问题。我需要在这里使用字符串。
  • 然后只需创建方法public ActionResult StartBrVisit(string id)(您也可以添加string name)。您的 id 值被添加为路由值,而不是查询字符串值,因此您也可以使用 Request.RequestContext.RouteData.Values["id"]
  • 明白了。请使用代码 sn-p 将其发布为答案(如果可能)。谢谢。

标签: asp.net-mvc redirecttoaction


【解决方案1】:

您已经使用名为id 的参数定义了一个路由,因此当您使用new { id = "id" } 时,RedirectToAction() 方法会找到匹配项并将该值添加为路由值,而不是查询字符串值(在name,没有匹配,所以将其值添加为查询字符串值)。您可以使用

string id = (string)Request.RequestContext.RouteData.Values["id"]

但是,向方法中添加参数会容易得多

public ActionResult StartBrVisit(string id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多