2010-04-16 2 views
3

У меня есть настраиваемый маршрут без ограничений, который генерирует Restful URL с ActionLink.MVC ActionLink генерирует NON-Restul URL ПОСЛЕ добавления ограничений

Route -

routes.MapRoute(
      "Blog", // Route name 
      "Blog/{d}/{m}/{y}", // URL with parameters, 
      new { controller = "Blog", action = "Retrieve" } 

Формирует -

http://localhost:2875/Blog/12/1/2010 

С -

<%=Html.ActionLink("Blog Entry - 12/01/2010", "Retrieve", "Blog", new { d = 12, m = 01, y = 2010 }, null)%> 

Если добавить ограничения, как это.

  routes.MapRoute(
      "Blog", // Route name 
      "Blog/{d}/{m}/{y}", // URL with parameters, 
      new { controller = "Blog", action = "Retrieve" }, 
      new { d = @"\d{2}", m = @"\d{2}", y = @"\d{4}" } 

Он генерирует -

http://localhost:2875/Blog/Retrieve?d=12&m=1&y=2010 

Дополнительная информация: добавляется до пользовательского маршрута.

Любые идеи? Приветствия

ответ

4

Я работал над одной и той же проблемой при написании своего блога. В конце я понял, что моим Urls придется использовать цифры в 1 разрядный месяц. Измените свое определение маршрута на это, и оно будет работать:

routes.MapRoute(
    "Blog", // Route name 
    "Blog/{d}/{m}/{y}", // URL with parameters, 
    new { controller = "Blog", action = "Retrieve" }, 
    new { d = @"\d{1,2}", m = @"\d{1,2}", y = @"\d{4}" } 

Или вы можете передать 2-значные строки, как ваши ценности день/месяц маршрут .. но вы можете пропустить это в некоторых местах и ​​есть мертвые ссылки, поэтому я бы рекомендовал ограничения маршрута исправить ..

Если вы найдете обходное решение - напишите мне письмо по почте^_^

1

Artiom по существу прав. Так как ваш код ActionLink указывает одиночные целые числа в значениях маршрута, одна цифра выходит из строя против вашего ограничения. Таким образом, вы можете изменить ограничение, как следует Артем, или немного изменить код ActionLink так что значения маршрута являются «строка» (в двойных кавычках):

Html.ActionLink("Blog Entry - 12/01/2010", "Retrieve", "Blog", new { d = "12", m = "01", y = "2010" }, null)

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