如何重定向到特定的操作路线

时间:2017-11-03 06:26:42

标签: c# razor asp.net-mvc-5

这是我的自定义路线。但是当我想使用RedirectToAction("action","controller");时,它会导致错误。 路由表中没有路由与提供的值匹配。 我访问了一些相关的帖子,但我无法解决。我该如何解决?

routes.MapMvcAttributeRoutes();
routes.LowercaseUrls = true;
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}/{filter1}/{filter2}/{filter3}/{filter4}/{filter5}/{filter6}/{filter7}/{filter8}/{filter9}/",
    defaults: new
    {
        controller = "Shop",
        action = "Category",
        id = UrlParameter.Optional,
        filter1 = UrlParameter.Optional,
        filter2 = UrlParameter.Optional,
        filter3 = UrlParameter.Optional,
        filter4 = UrlParameter.Optional,
        filter5 = UrlParameter.Optional,
        filter6 = UrlParameter.Optional,
        filter7 = UrlParameter.Optional,
        filter8 = UrlParameter.Optional,
        filter9 = UrlParameter.Optional,
    }
);

1 个答案:

答案 0 :(得分:2)

我曾在RedirectToAction遇到类似的问题,并发现您需要注册的有效路线才会导致该操作。在您的情况下,发生错误是因为您的可选参数超过预期数量。

我测试代码并且有效:

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

如果您想要自己的路线,则可以在[Route("")]的第一个添加routes.MapMvcAttributeRoutes();RegisterRoutes方法的行动中使用RouteConfig.cs。之后如下所示:

[Route("{TestEmployee}/{Index}/{id?}/{filter1?}/{filter2?}/{filter3?}/{filter4?}/{filter5?}/{filter6?}/{filter7?}/{filter8?}/{filter9?}")]
    public ActionResult Index()
    {
       //do something 
    }

然后你可以redirectToAction

return RedirectToAction("Index", "TestEmployee" ,routeValues: null);