2013-03-28 4 views
1

Вот мой маршрут, единственные необходимые пары являются контроллеромASP.net MVC 4 маршрутизации и дополнительные параметры неожиданного результат

 routes.MapRoute(
      "countryoptional/controller", 
      "{country}/{controller}/{pagelabel}/{page}", 
      new { action = "index", country = UrlParameter.Optional, pagelabel = UrlParameter.Optional, page = UrlParameter.Optional }, 
      new 
      { 
       pays = @"$|^(france|belgium)$", 
       controller = @"^(car|boat)$", 
       pagelabel = @"^$|page", 
       page = @"^$|\d{1,6}" 
      } 
     ); 

Я ожидаю, что следующие URLS работать:

/автомобиль/

/автомобиль/страница/2

/Франция/автомобиль

/Франция/Автомобиль/страница/2

Это вид работ:

Url.Action("index", "car", new { country= "france", pagelabel = "page", page = 2}) 

будет производить: /Франция/автомобиль/страница/2

НО

Если Я хочу url без страны, действие вида отвечает, но конструктор, подобный

Url.Action("index", "car", new { pagelabel = "page", page = 2}) 

будет производит эту ссылку: // машина/страница/2

Я получаю это двойной слэш «// автомобиль» поэтому он разрывает связь, конечно.

Я подозреваю, что ему не нравится возможность параметра {country}, предшествующего контроллеру, необязательно в определении {country}/{controller}/... Я не хочу усложнять конфигурацию маршрута и с другой декларацией маршрута Должен быть способ, что я делаю неправильно?

+0

В ваших необязательных параметрах вы платите вместо страны. Я не уверен, что это имеет значение. –

+0

Я не слишком хорош с регулярным выражением, но я считаю, что вы добавляете ограничение, говорящее, чтобы убедиться, что в стране есть либо Франция, либо бельгия. Поэтому, когда вы не предоставляете его, он не устанавливает значение страны. –

ответ

4

Дополнительные параметры должны соответствовать любым требуемым параметрам. Об этом я не знаю. Такое же ограничение применяется везде (ваши определения методов и т. Д.).

Просто повторите маршрут и получите один номер с нужной страной и без страны. MVC разработает, какой из них использовать.

+0

«Дополнительные параметры должны соответствовать любым требуемым параметрам». Я не знал об этом правиле, я думаю, что ответ на вопрос, спасибо –

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