2014-08-06 2 views
0

Я хочу отобразить список трасс для горных велосипедных прогулок по провинциям или районам. Область состоит из многих областей.Различные конфигурации маршрутов, идущие к одному и тому же методу действия

Я пытаюсь отобразить следующие 2 адреса:

  • www.mywebsite.com/paarl-trails (area trails)
  • www.mywebsite.com/western-cape-trails (province trails)

У меня есть следующая конфигурация маршрута (в указанном порядке):

routes.MapRoute(
    name: "ProvinceDefault", 
    url: "{seoProvinceName}-trails", 
    defaults: new { controller = "Province", action = "Index" }, 
    namespaces: new[] { "MyProject.WebUI.Controllers" } 
); 

routes.MapRoute(
    name: "AreaDefault", 
    url: "{seoAreaName}-trails", 
    defaults: new { controller = "Area", action = "Index" }, 
    namespaces: new[] { "MyProject.WebUI.Controllers" } 
); 

Вот как я создаю ссылки в представлении:

<a href="@Url.RouteUrl("AreaDefault", new { seoAreaName = trail.Area.SeoName })">@trail.Area.Name</a>, 
<a href="@Url.RouteUrl("ProvinceDefault", new { seoProvinceName = trail.Area.Province.SeoName })">@trail.Area.Province.Name</a> 

Соединения отображаются правильно, но оба они перенаправлены на индексный метод указателя провинции. Я изменил две конфигурации маршрутов, но они оба перешли к методу Index контроллера области.

Я хочу, чтобы www.mywebsite.com/paarl-trails, чтобы перейти к методу индекса контроллера области, и я хочу, чтобы www.mywebsite.com/western-cape-trails перешел к методу Index для контроллера провинции.

Как я могу получить это право?

+0

Как MVC может определить, что 'paarl' является областью, а' западный мыс 'является провинцией? Единственный способ, которым вы могли бы это сделать, - создать действие, которое пыталось определить, что это такое, и вручную направлять на правильное действие. – DavidG

ответ

0

MVC Маршрутизация не работает таким образом. Когда URL-адрес запрашивается с сервера, механизм маршрутизации выбирает первый маршрут, соответствующий URL-адресу, в том порядке, в котором вы их определили. Система маршрутизации не может различать два указанных вами маршрута, потому что они выглядят одинаково: что-то следует за -trails.

Вы должны изменить URL-адреса и их маршруты, чтобы механизм маршрутизации, чтобы правильно обращаться с ними, что-то вроде этого:

URL-адрес:

  • www.mywebsite.com/paarl-area- трассы (область тропы)
  • www.mywebsite.com/western-cape-province-trails (провинция лыжня)

Маршруты:

routes.MapRoute(
    name: "ProvinceDefault", 
    url: "{seoProvinceName}-province-trails", 
    defaults: new { controller = "Province", action = "Index" }, 
    namespaces: new[] { "MyProject.WebUI.Controllers" } 
); 

routes.MapRoute(
    name: "AreaDefault", 
    url: "{seoAreaName}-area-trails", 
    defaults: new { controller = "Area", action = "Index" }, 
    namespaces: new[] { "MyProject.WebUI.Controllers" } 
); 
1

Я согласен с предыдущим ответом, поскольку механизм маршрутизации ASP.NET MVC не имеет возможности различать оба маршрута. Вы можете добавить имя области до SEOProvinceName. Таким образом, маршруты хотели бы это:

  • www.mywebsite.com/paarl-area-trails (площадь трасс)
  • www.mywebsite.com/paarl-area/western-cape-province-trails (провинция тропа с площадью)

для того, чтобы сделать эту работу, маршруты должны быть что-то вроде этого:

routes.MapRoute(
    name: "ProvinceDefault", 
    url: "{seoAreaName}/{seoProvinceName}-province-trails", 
    defaults: new { controller = "Province", action = "Index" }, 
    namespaces: new[] { "MyProject.WebUI.Controllers" } 
); 

routes.MapRoute(
    name: "AreaDefault", 
    url: "{seoAreaName}-area-trails", 
    defaults: new { controller = "Area", action = "Index" }, 
    namespaces: new[] { "MyProject.WebUI.Controllers" } 
); 

Я надеюсь, что это помогает.

Смежные вопросы