Aller au contenu principal

12-1 Accepter un paramètre Query string

Rappelons l'objectif: filtrer la liste de jeux sur la page d'accueil en fonction d'une sélection dans le menu de gauche.

Une option serait de créer un contrôleur VillesController et de faire un lien vers une URL du genre /villes/{id}. Sur cette URL et dans ce contrôleur, on afficherait les événements associés à la ville demandée (via le paramètre id dans l'URL).

Ce serait une option idéale si nous avions de l'information spécifique à la ville à afficher (image, description, etc.), en plus de la liste d'événements. Par contre, dans notre cas, on se retrouverait à carrément dupliquer la vue et l'action Index du contrôleur d'événement.

De plus, si on voulait appliquer des filtres supplémentaires de façon conjointe, on se retrouverait avec une structure d'URL difficile à gérer.

L'idéal est donc de rester sur la même vue, mais de n'afficher que les événements correspondant à la ville demandée. On ne duplique rien et on répond au besoin.

Dans ce cas, il est possible de simplement utiliser un Query string, soit un paramètre d'URL. Ce qu'on vise est une URL telle que /?ville={id}. Si le paramètre n'est pas présent, on affiche tout. S'il est présent, on affiche seulement les villes correspondantes.

Ajout du paramètre ville à l'action Index

Premièrement, on ajoute à l'action concernée (Index(), soit la page d'accueil), un paramètre optionnel ville de type int

Snowfall.Web.Mvc/Controllers/EvenementsController.cs
public async Task<IActionResult> Index(int? ville)

Comme nous avons vu lors des premiers niveaux, .NET Core MVC tentera d'associer à cette variable un paramètre correspondant au niveau de l'URL.

info

Le paramètre est optionnel, puisque par défaut, tous les événements sont affichés, à moins de filtrer volontairement en fonction de la ville.