我正在研究MVC 4应用程序并在route.config中映射URL。 我想制作具有50个不同路由名称的路由,我想在route.config中运行for循环。
for (int i = 1; i <= 50; i++)
{
string routeChildLink = "URLRoute" + i.ToString();
string pathChildLink = menuSubChild.pageid.ToString() + "/" + menu.title.Replace(" ", "_") + "/" + menuChild.title.Replace(" ", "_") + "/" + menuSubChild.title.Replace(" ", "_") + "/" + i;
routes.MapRoute(routeSubChildLink, pathSubChildLink, new { controller = "home", action = "index" });
}
但是当我运行网站时,它会通过错误声明“路由集合中已有一条名为'URLRoute1'的路由。路由名称必须是唯一的。” For循环不起作用。
请帮助。
谢谢
答案 0 :(得分:0)
使用
路由调试器以查看正在创建和调用的路由
http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx
看起来第二次调用循环。 MapRoute表中已经有了URLRoute1。
答案 1 :(得分:0)
框架总是尝试按照添加到RouteCollection的路由的顺序将请求的URL与路由匹配。
所以你应该把自定义路线放在默认路线之前,
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
for (int i = 1; i <= 50; i++)
{
string routeChildLink = "URLRoute" + i.ToString();
//Custom route
routes.MapRoute(
name: "Route name",
url: "URL with parameters",
defaults: new { controller = "Home", action = "MethodName" }
);
}
//default route
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}