2014-02-11 2 views
0

Я создал новый маршрут, который выглядит так в RouteConfig.cs.Ошибка маршрутизации MVC4 с дополнительными параметрами

routes.MapRoute("Edit_Personal", 
       "Edit/Personal/{userID}/{refKey}/{houseID}", 
       new {controller = "Edit", action = "Personal", 
         userID = UrlParameter.Optional, 
         refKey = UrlParameter.Optional, 
         houseID = UrlParameter.Optional }); 

Этот маршрут работает отлично, если я прохожу в чем-то вроде:

Edit/Personal/78887/abcd/ 

UserID = 78887 
RefKey = abcd 
HouseID = null 

Однако, если RefKey никогда не передается (это необязательно), но принят HouseID, я получаю это как результат (URL-адрес):

Edit/Personal/78887//88881 <--- Notice the two slashes between the numbers. 

UserID = 78887 
RefKey = 88881 
HouseID = null 

результаты, которые я ожидал, являются:

UserID = 78887 
RefKey = null 
HouseID = 88881 

Если вы заметили, RefKey должен быть NULL, однако он привязывает HouseID к параметру RefKey.

Есть ли способ исправить это? Я что-то упускаю?

+1

Вы можете сделать это со знаком вопроса, например: '» Редактировать/Личные/{идентификатор пользователя}/{refKey?}/{houseID} "' –

ответ

1

Вам нужно определить несколько маршрутов, как показано ниже:

routes.MapRoute(
    "WithAll", 
    "{controller}/{action}/{UserID}/{RefKe}/{HouseID}", 
    new{ controller = "Edit",action = "Personal"}); 

routes.MapRoute(
    "WithoutRefke", 
    "{controller}/{action}/{UserID}/{HouseID}", 
    new{controller = "Edit",action = "Personal"}); 

routes.MapRoute(
    "WithoutRefkeAndHouseID", 
    "{controller}/{action}/{UserID}", 
    new{controller = "Edit",action = "Personal",UserID= UrlParameter.Optional}); 

Взгляните на следующую ссылку для получения более подробной информации: http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx/

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