如何在MVC中使用RedirectToRoute(" routeName")?

时间:2016-12-01 11:53:35

标签: asp.net-mvc redirecttoroute

我很困惑为什么我的RedirectToRoute()方法不起作用。我有像这样的RouteConfig.cs文件

routes.MapRoute(
    "pattern1",
    "{action}",
    new { controller = "Home", action = "About" }
);

routes.MapRoute(
    "pattern2",
    "{controller}/{action}/{id}",
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);

在此配置中,我的默认控制器主页和操作关于正在调用,现在在操作方法中,我正在使用以下值调用RedirectToRoute()

public ActionResult Index()
{
    return View();
}
public ActionResult About()
{
    return RedirectToRoute("pattern2");
}

为什么RedirectToRoute()没有调用管理员/索引操作

2 个答案:

答案 0 :(得分:4)

试试这个:

return RedirectToRoute(new 
{ 
    controller = "Admin", 
    action = "Index", 
    id = null 
});

您也可以使用RedirectToAction()方法。看起来更直观。

答案 1 :(得分:2)

这是因为您定义的路线。 RedirectToRoute()重定向到您定义的路由。您为" pattern2"定义的网址是" {controller} / {action} / {id}"。如果要使用仅接受routeName的重载,则需要在RouteConfig中显式定义url。例如:

routes.MapRoute(
    "pattern2",
    "Admin/Index",
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);

如果您不想显式定义url,那么您需要使用RedirectToRoute()的不同重载来接受routeValues对象。