Маршрутизация не работает в моем приложении asp.net - PullRequest
0 голосов
/ 06 июня 2011

У меня 4 маршрута определены 5 разных URL.Протестировано много с RouteDebugger, но не может решить.

Проблема состоит в том, что Лучшие 2 ссылки всегда используют {controller} / {action} / {id} этот маршрут, который является root1 и не можетперенаправить на нужные страницы.

Ссылки

@Html.ActionLink("Go Index by name", "Page", "Home", new { name="contact"}, null)

@Html.ActionLink("Go Index by id", "Index", "Admin", new { id=2}, null)


@Html.ActionLink("Go Index by id and name", "Page", "Home", new { name = "contact", id = 2 }, null)


@Html.ActionLink("Root Admin", "Index", "Admin")


@Html.ActionLink("Root", "Index", "Home")

Вот карта. Маршрут

    routes.MapRoute("root1",
      "{controller}/{action}/{id}",
       new { controller = "Admin", action = "Index" });

    routes.MapRoute("root2",
        "{controller}/{action}/{name}",
        new { controller = "Home", action = "Page" });

    routes.MapRoute("root3", 
        "{controller}/{action}/{name}/{id}", 
        new { controller = "Home", action = "Page" });

    routes.MapRoute("root4", 
        "{controller}/{action}/{name}", 
        new { controller = "Home", action = "Index", name = UrlParameter.Optional });

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Это маршруты, которые я настроил, и кажется, что каждый из них правильно проложен.

Обратите внимание, что root3 был перемещен на вершину, поскольку root2 также будет соответствовать этому. также, проверка для root1 с id, как предложил король Джулиан

Маршрут:

@Html.ActionLink("Root Admin", "Index", "Admin")

не должен совпадать с root1 и root2, поскольку для id и name по умолчанию нет определения в определении маршрута

routes.MapRoute("root3",
     "{controller}/{action}/{name}/{id}",
      new { controller = "Home", action = "Page" });

routes.MapRoute("root1",
      "{controller}/{action}/{id}",
      new { controller = "Admin", action = "Index" },
      new { id = @"\d+" });

routes.MapRoute("root2",
      "{controller}/{action}/{name}",
      new { controller = "Home", action = "Page" });

routes.MapRoute("root4",
      "{controller}/{action}/{name}",
      new { controller = "Home", action = "Index", name = UrlParameter.Optional     
});
1 голос
/ 07 июня 2011

Добавьте ограничения к вашим маршрутам.Например:

routes.MapRoute(
    "root1",
    "{controller}/{action}/{id}",
    new { controller = "Admin", action = "Index" },
    new {id = @"\d+" }
 );

Гарантирует, что root1 совпадает только тогда, когда id является целым числом.В противном случае root2 поймает его.

...