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
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.
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.