Asp.Net MVC:Как заставить Html.ActionLink правильно отображать целочисленные значения?

StackOverflow https://stackoverflow.com/questions/146367

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть приложение asp.net mvc с маршрутом, похожим на:

routes.MapRoute("Blog", 
    "{controller}/{action}/{year}/{month}/{day}/{friendlyName}",                          
    new { controller = "Blog", action = "Index", id = "", friendlyName="" }, 
    new { controller = @"[^\.]*", 
          year = @"\d{4}", 
          month = @"\d{2}", 
          day = @"\d{2}" }
);

Моя подпись метода действия контроллера выглядит так:

public ActionResult Detail(int year, int month, int day, string friendlyName)
{ // Implementation... }

На мой взгляд, я делаю что-то вроде:

<%= Html.ActionLink<BlogController>(item => item.Detail(blog.PostedOn.Year, blog.PostedOn.Month, blog.PostedOn.Day, blog.Slug), blog.Title) %>

Хотя URL-адрес, созданный с помощью ActionLink, работает, он использует переменные строки запроса, а не переписывание URL-адреса.

Например, будет создан /blog/detail/my-slug?year=2008&month=7&day=5 вместо /blog/detail/2008/07/05/my-slug.

Есть ли способ заставить общую версию ActionLink правильно дополнять целочисленные значения, чтобы URL-адрес выглядел как ожидалось?

Спасибо

Джим

Это было полезно?

Решение

Вместо этого я бы предложил форматировать год, месяц и день как строки.Думать об этом:Будете ли вы выполнять математические вычисления с этими «целыми числами»?Вероятно, нет, поэтому нет смысла делать их целыми числами.Если они у вас есть как строки, вы можете принудительно использовать формат ведущих нулей.

Другие советы

Тот факт, что ваши параметры являются целыми числами, не имеет никакого отношения к вашей проблеме.Определение маршрута, которое вы хотите использовать, на самом деле не используется, поэтому сгенерированный URL-адрес использует параметры строки запроса вместо построения нужной структуры.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top