RedirectToRoute如何工作以及如何在其中传递数据?

时间:2019-01-25 07:30:41

标签: asp.net asp.net-mvc asp.net-mvc-4

我正在尝试重定向到RecomController中的路由,并且操作是Index,我已经在RouteConfig文件中定义了路径,并且还指定了我调用RedirectToRoute函数时传递的id参数。由于某种原因,它找不到该路径。

我还在RecomController Index动作上方创建了Route属性,但是它仍然无法将我导航到该路径。我想念什么吗?

RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
            routes.MapRoute(
            name: "Recomroute",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Recom", action = "Index", id = UrlParameter.Optional }
            );
        }

RecomController.cs:

 [Route("Recom/Index")]
        public ActionResult Index(int id)
        {
         ............//Functioning
        }

调用该功能(在另一个控制器中):

ProjectController.cs:

return RedirectToRoute("Recom/Index/{id}", new {id = projectdto.Id });

1 个答案:

答案 0 :(得分:0)

听起来像您在RedirectToRoute()中使用了错误的路线名称或路径,因此它不起作用:

// this is wrong because first parameter did not match
return RedirectToRoute("Recom/Index/{id}", new {id = projectdto.Id });

对于两个参数重载,它需要路由名称(而不是路由路径)和路由值,如下定义所示:

protected internal RedirectToRouteResult RedirectToRoute(string routeName, 
                           RouteValueDictionary routeValues)

因此,您需要提供完整的路由名称和在RegisterRoutes中定义的路由值(例如Recomroute)。

return RedirectToRoute("Recomroute", new {
    controller = "Recom", 
    action = "Index", 
    id = projectdto.Id
});

旁注:

1)您仍然需要提供controlleractionid参数以匹配路由定义。

2)Recomroute似乎是在默认路由下定义的,具有相同的路由段定义,它将覆盖其下的所有自定义路由,如果您要评估Recomroute,请先将其移至最高位置并使用其他路径违反默认路由。