2015-01-08 2 views
0

Мое приложение MVC4 имеет форму. В этом случае люди выбирают критерии из полей выбора, а затем выбирают поиск.Как узнать, какой URL-адрес MVC.NET пытается найти

На данный момент он направляет контроллер, который сохраняет значение как TempData, а затем перенаправляется на правильную целевую страницу.

Таким образом, с видом, после того, как кнопка поиска нажата путь является обувь в моей ProductController

[HttpGet] 
    public ActionResult Shoes(Shoe shoe) 
    { 

     TempData["shoe"] = shoe; 

     return RedirectToAction("Index", "Shoes", new { SelectedSize = shoe.SelectedSize, SelectedColour = shoe.SelectedColour }); 

    } 

Вышеприведенные переадресовывает к

[HttpGet] 
    public ActionResult Index(Shoes shoes, int startIndex, int pageSize) 
    { 
     //logic 
    } 

Мои 2 маршруты

routes.MapRoute(
     name: "ShoesA", 
     url: "Shoes/{startIndex}", 
     defaults: new { startIndex = 0, pageSize = 10, controller = "ShoesConnectors", action = "Index" } 
    ); 

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

Все работает нормально. URL разрешается до http://localhost:52603/Shoes?SelectedSize=12

Что я хочу, это изменить URL-адрес, чтобы не использовать запрос. EG

http://localhost:52603/Shoes?SelectedSize=12

стать

http://localhost:52603/Shoes/12

(я должен отметить, я использую пагинацию по маршруту, так что это будет на самом деле показать http://localhost:52603/Shoes/10/12 где 10 является STARTINDEX)

Таким образом, я добавил следующие маршруты

 routes.MapRoute(
     name: "ShoesB", 
     url: "Shoes/{startIndex}/{SelectedSize}/{SelectedColour}", 
     defaults: new { startIndex = 0, pageSize = 10, controller = "Shoes", action = "Index" } 
     ); 

     routes.MapRoute(
     name: "ShoesC", 
     url: "Shoes/{startIndex}/{SelectedSize}", 
     defaults: new { startIndex = 0, pageSize = 10, controller = "Shoes", action = "Index" } 
     ); 

     routes.MapRoute(
     name: "ShoesD", 
     url: "Shoes/{startIndex}/{SelectedColour}", 
     defaults: new { startIndex = 0, pageSize = 10, controller = "Shoes", action = "Index" } 
     ); 

Когда я нажимаю мою кнопку поиска, я показал страницу 404

Я понимаю, что эта ошибка существует из-за новые маршруты, но я не понимаю, почему он не может найти страницу ...

URL-адрес разрешается, как ожидается, до http://localhost:52603/Shoes/0/12, но я не знаю, как отладить это.

Почему MVC не может найти правильный контроллер? Чего он пытается решить?

ответ

0

Вы хотите использовать Attribute Routing

Редактировать: кстати, если вы в состоянии выполнить обновление до MVC5, атрибут маршрутизации является «встроенной» (см Attribute Routing in MVC5)

0

Ответ , это очень легко сделать в MVC4. Примеры, которые я опубликовал, были довольно правильными.

Ошибка была в пределах настройки в проекте в Visual Studio. Я открыл Работу проекта и перешел на вкладку «Веб».

Отсюда я отказался от «Использовать локальный веб-сервер IIS» и выбрал «Использовать сервер разработки Visual Studio», и это решило проблему.

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