2013-05-22 4 views
1

Я этот маршрут зарегистрирован:маршрут MVC не вызывался

context.MapRoute(
       "Manager", 
       "manage/{id}/{action}", 
       new { action = "index", controller = "manage", id = UrlParameter.Optional }, 
       new string[] { "Web.Areas.Books.Controllers" } 
      ); 

Тогда у меня есть эти 2 URLs:

http://<site>/manage   <-- hits the index action of managecontroller 
http://<site>/manage/publish <-- ALSO HITS INDEX VIEW even I have publish action 

Что может быть не хватает?

В принципе, мне нужно один маршрут, чтобы служить всем этим:

http://<site>/manage   <-- should go to index action 
http://<site>/manage/publish <-- should go to publish action 
http://<site>/manage/delete <-- should go to delete action 
http://<site>/manage/123123/update <-- should go to update action 

ответ

2

Вы ожидаете второй сегмент будет переплетены с параметром действия, но в вашем маршруте есть параметр ID.

"manage/{id}/{action}" 

С /manage/publish URL, параметр идентификатор будет иметь значение publish.

Framework не может найти параметр действия, поэтому он использует значение по умолчанию и перенаправляет его на действие индекса. Вы можете иметь только параметры в конце, как дополнительные.

Если вам нужно указать и целочисленный id в середине, вы можете заставить его работать, указав ограничение.

context.MapRoute(
       "Manager", 
       "manage/{id}/{action}", 
       new { action = "index", controller = "manage" }, 
       new { id = @"\d+" }, //second segment has to be an integer 
       new string[] { "Web.Areas.Books.Controllers" } 
      ); 

Другие URL-адреса должны возвращаться к маршруту и ​​работе по умолчанию.

+0

См. Мое обновление. Спасибо за быстрый ответ – kheya

+0

@Projapati Вам необходимо создать настраиваемый механизм просмотра, который вам нужен. – TheGeekYouNeed

+0

@Projapati Попробуйте маршрут, который я разместил. –

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