2014-04-11 6 views
0

Я начинаю работу в asp.net mvc. Я пробую маршрут. но все форматы маршрутов, используя первое определенное значение маршрута. Пример всех просмотров url заканчивая «index», я не хочу этот формат url. и я хочу localhost:56609/Cuisines/Detail/4/thai, но программа показывает localhost:56609/Cuisines/getCuisineDetail/6/thai. Как это объяснить, пожалуйста.Asp.net MVC 4 Несколько маршрутов

RouteConfig

routes.MapRoute(_ 
    name:="RestaurantDetail", _ 
    url:="{controller}/{action}/{id}/{title}", _ 
    defaults:=New With {.controller = "Restaurants", .action = "Index", .id =  UrlParameter.Optional, .title = UrlParameter.Optional} _ 
) 

routes.MapRoute(_ 
    name:="Cuisines", _ 
    url:="{controller}/Detail/{id}/{title}", _ 
    defaults:=New With {.controller = "Cuisines", .action = "getCuisineDetail", .id = UrlParameter.Optional, .title = UrlParameter.Optional} _ 
) 

routes.MapRoute(_ 
    name:="Default", _ 
    url:="{controller}/{action}", _ 
    defaults:=New With {.controller = "Home", .action = "Index"} _ 
) 

Посмотреть

@<p>@Html.ActionLink(Model(i).Name, "getCuisineDetail", New With {.id = Model(i).CusineID, .title = OnlineSiparis.UrlEditor.CheckUrl(Model(i).Name)}) </p> 

enter image description here enter image description here enter image description here

ответ

2

Маршрут "RestaurantDetail" также соответствует шаблону URL в более конкретной "Cuisines" маршрута. Попробуйте изменить код так, чтобы сначала отображались «Кухни» ...

routes.MapRoute(_ 
    name:="Cuisines", _ 
    url:="{controller}/Detail/{id}/{title}", _ 
    defaults:=New With {.controller = "Cuisines", .action = "getCuisineDetail", .id = UrlParameter.Optional, .title = UrlParameter.Optional} _ 
) 

routes.MapRoute(_ 
    name:="RestaurantDetail", _ 
    url:="{controller}/{action}/{id}/{title}", _ 
    defaults:=New With {.controller = "Restaurants", .action = "Index", .id = UrlParameter.Optional, .title = UrlParameter.Optional} _ 
) 
+0

Да, его работы благодарю вас. Но я не понимаю, почему маршрут кухни должен быть сначала – cptc

+1

Поскольку «RestaurantDetail» также соответствует шаблону, указанному в маршруте «Кухни», и поставщик маршрутизации проверяет маршруты в порядке, первый, который отображается, «победит». Поэтому вам нужно сначала наметить маршрут «Кухни», если вы хотите, чтобы он соответствовал «{controller}/Detail/{id}/{title}" '(' @ Html.ActionLink (Model (i) .Name, " getCuisineDetail "использует тот же метод для создания ссылки). –

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