【问题标题】:How to redirect to a specific URL from within a controller?如何从控制器内重定向到特定 URL?
【发布时间】:2012-01-05 23:34:48
【问题描述】:

我试图在用户提交表单后将其重定向到特定地址。 我使用的是我的内容控制器中的以下代码:

return RedirectToAction("Business", new RouteValueDictionary(new { controller = "Content", action = "Business", Id = business.BusinessID }));

它会创建一个这样的 URL: www.x.com/Content/Business?Id=13

我真正想要的是这样的: www.x.com/Content/Business/13

我真的不希望查询字符串用 ?但要与其余的 URL 保持一致。

有没有办法这样做?

【问题讨论】:

标签: asp.net-mvc controllers redirecttoaction


【解决方案1】:

代码实际上应该是相同的,但要注意的是在 Global.asax 文件中,我设置了我的路由表,我需要有以下代码,以便产生我想要的结果。注意第三个url参数{parameter}

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{parameter}", // URL with parameters
                new { controller = "Tokens", action = "Index", parameter = UrlParameter.Optional } // Parameter defaults
            );

使用该代码,我只需要在我的代码中使用变量“参数”而不是“Id”:

return RedirectToAction("Business", new RouteValueDictionary(new { controller = "Content", action = "Business", parameter= business.BusinessID }));

为变量使用与 MapRout() 函数中定义的名称相同的名称非常重要。

这样做,我得到了我想要的结果:

www.x.com/Content/Business/13

【讨论】:

  • 这是正确的——路由中定义的参数名称应该与new { }中的属性名称匹配。
【解决方案2】:

看看这个

return RedirectToAction("Business" , "Content" , new { Id = business.BusinessID });

【讨论】:

  • 这也是同样的事情。你只是在调用不同的重载。
【解决方案3】:

对我来说,您的代码行生成了您期望的链接,您的路由设置是否正常?

【讨论】:

  • 是的,你是对的。我将 Id 的默认命名更改为参数。我应该在我的控制器功能中将其更改为相同的内容。问题就这样解决了。
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多