Asp.Net MVC: Comment obtenir Html.ActionLink pour restituer correctement les valeurs entières?

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

  •  02-07-2019
  •  | 
  •  

Question

J'ai une application asp.net mvc avec un itinéraire similaire à:

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}" }
);

La signature de ma méthode d'action de contrôleur ressemble à:

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

À mon avis, je fais quelque chose comme:

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

Bien que l'URL générée avec ActionLink fonctionne, elle utilise des variables de chaîne de requête plutôt que la réécriture d'URL.

Par exemple, il produirait / blog / detail / mon-slug? année = 2008 & mois = 7 & jour = 5 au lieu de / blog / detail / 2008/07/05 / mon-slug

Existe-t-il un moyen d'obtenir que la version générique d'ActionLink complète correctement les valeurs entières afin que l'URL apparaisse comme prévu?

Merci

Jim

Était-ce utile?

La solution

Je suggérerais plutôt de formater l'année, le mois et le jour en chaînes. Pensez-y: ferez-vous des calculs avec ces "nombres entiers"? Probablement pas, il est donc inutile de les transformer en nombres entiers. Une fois que vous les avez sous forme de chaînes, vous pouvez forcer le format zéro principal.

Autres conseils

Le fait que vos paramètres soient des entiers n'a rien à voir avec votre problème. La définition de route que vous souhaitez utiliser n'est pas réellement utilisée. C'est pourquoi l'URL générée utilise des paramètres de chaîne de requête au lieu de créer la structure souhaitée.

Les itinéraires étant évalués de haut en bas, vous avez probablement une définition d'itinéraire plus générique qui satisfait la génération d'URL demandée. Essayez de déplacer l’itinéraire que vous avez affiché dans cet article en haut de vos définitions d’itinéraire, et vous verrez que le lien généré est conforme à vos attentes. Puis, envisagez de modifier les définitions de votre itinéraire pour qu'elles soient plus spécifiques ou déplacez-les simplement si nécessaire.

Le débogage de ces types de scénarios peut être très pénible. Je suggère de télécharger le débogueur d'itinéraires de Phil Haack, cela vous facilitera la vie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top