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

Lij*_*raj 3 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 }
);
Run Code Online (Sandbox Code Playgroud)

在此配置上,默认控制器Home和action About被调用,现在在action方法中,我使用以下值调用RedirectToRoute():

public ActionResult Index()
{
    return View();
}
public ActionResult About()
{
    return RedirectToRoute("pattern2");
}
Run Code Online (Sandbox Code Playgroud)

为什么RedirectToRoute()不调用Admin / Index操作

小智 6

这是因为您定义的路线。RedirectToRoute() 重定向到您定义的路由。您为“pattern2”定义的 URL 为“{controller}/{action}/{id}”。如果你想使用只接受routeName的重载,那么你需要在RouteConfig中显式定义url。例子:

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

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

  • 为什么它不带我到我提到的 MapRoute 方法()的默认控制器和操作?如果我必须定义 Admin/Index,那么它将是一个静态值,那么 RedirectToRoute() 的目的是什么,我可以使用 redirecToAction 代替。我想知道这个方法的确切用户,以便我可以利用它..谢谢 (4认同)

小智 5

尝试这个:

return RedirectToRoute(new 
{ 
    controller = "Admin", 
    action = "Index", 
    id = null 
});
Run Code Online (Sandbox Code Playgroud)

您也可以使用RedirectToAction()方法。似乎更直观。