这是我的自定义路线。但是当我想使用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,
}
);
答案 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);