Asp.Net MVC: как мне получить Html.ActionLink для правильной визуализации целочисленных значений? - PullRequest
5 голосов
/ 28 сентября 2008

У меня есть приложение 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 получался, как и ожидалось?

Спасибо

Jim

Ответы [ 2 ]

4 голосов
/ 28 сентября 2008

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

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

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

2 голосов
/ 28 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...