MVC 3 – Routing – Partie 5

Nous avons vu dans le précédent article l’utilisation de nouvelles parties dynamiques dans nos URL’s pour pouvoir passer des paramètres à notre action. Désormais au lieu de traiter directement avec l’objet RouteData je voudrais plutôt que le pseudonyme soit un paramètre de la méthode Index().

1) Modification de la méthode Index()

Tout d’abord on va ajouter à notre méthode Index() un nouveau paramètre de type string.

public ActionResult Index(string pseudonyme)
{
  ViewBag.Pseudonyme = pseudonyme;
  return View();
}

Et voilà…c’est le seul changement à faire. En effet, le framework de routing MVC va se baser sur le nom de notre paramètre pour le mettre en relation avec la partie dynamique de notre URL que nous avons définit comme {pseudonyme} dans le fichier global.asax.cs. A noter que le nom de la variable n’est pas sensible à la case (PSEUDonYme aurait également fonctionné).

Et les conversions me direz-vous dans tout ça, ici c’est simple mais si on avait mis int pseudonyme en signature de méthode alors là effectivement l’application nous aurait renvoyée une erreur. Une solution peu élégante aurait été de mettre un entier nullable : int? pseudonyme. J’avoue c’est un peu absurde !

2) Un peu plus loin

Dans notre fichier global.asax.cs nous nous étions arrêté à cette définition pour la route 2 :

routes.MapRoute("Route 2", "{controller}/{action}", new { controller = "Home", action = "Index", pseudonyme="Inconnu" });

Ok bien, ça va dans notre cas on a qu’un seul controller et qu’une seule action, mais qui me dit que toutes mes actions prendrons un paramètre appelé pseudonyme. On va enlever cette partie spécifique du fichier pour obtenir ceci :

routes.MapRoute("Route 2", "{controller}/{action}", new { controller = "Home", action = "Index"});

OK, je relance en tapant l’URL localhost/Home/Index…j’ai plus mon Bonjour Inconnu mais juste Bonjour. Heureusement le framework .Net 4 est là et nous apporte les paramètres optionnels de méthode. Regardons le code de notre méthode Index :

public ActionResult Index(string pseudonyme = "Inconnu")
{
   ViewBag.Pseudonyme = pseudonyme;
   return View();
}

Désormais, si l’appel à la méthode Index() n’est fait avec aucun paramètre, alors par défaut, notre paramètre pseudonyme aura pour valeur Inconnu. Magique ! En relançant l’application et l’appel à localhost/Home/Index nous n’avons plus de régression et on retrouve notre Bonjour Inconnu.

Leave a Reply