MVC ActionLink генерирует URL без перезапуска ПОСЛЕ добавления ограничений - PullRequest
3 голосов
/ 16 апреля 2010

У меня есть собственный маршрут без ограничений, который генерирует URL Restful с ActionLink.

Маршрут -

 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

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

Есть идеи? Приветствия

Ответы [ 2 ]

4 голосов
/ 20 апреля 2010

Я работал над той же проблемой, когда писал свой блог. В конце концов я понял, что моим URL-адресам придется использовать цифры месяца, состоящие из 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 голос
/ 20 апреля 2010

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

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

...