For Loop无法在MVC4中的route.config中工作

时间:2013-07-26 05:56:22

标签: asp.net

我正在研究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循环不起作用。

请帮助。

谢谢

2 个答案:

答案 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);
            }