Aller au contenu principal

3-1 Introduction aux routes dynamiques

L'utilisation des contrôleurs est plutôt simple jusqu'à maintenant.

Nous nous appuyons sur le fait que l'action par défaut du contrôleur est Index et que nous n'avons pas à passer de paramètres comme un id par exemple.

Ceci étant dit, comment pourrions-nous supporter des besoins plus complexes et faire un lien vers la fiche individuelle d'un événement par exemple?

Créer une action Show dans EvenementsController

  1. Créer une fonction Show(). Commencez par créer une action Show dans EvenementsController qui permettra d'afficher la fiche détaillée d'un événement. Cette dernière n'existe pas encore, mais supposons que c'est ce que nous voudrions faire.

    Snowfall.Web.Mvc/Controllers/EvenementsController.cs
    public IActionResult Show()
    {
    return View();
    }

    Nous allons faire quelque chose d'un peu différent pour l'instant afin de tester la route. En effet, nous allons simplement retourner du contenu textuel, sans vue HTML associée.

    Cela permettra de tester le comportement de l'action, à laquelle nous pourrons greffer une vue plus tard.

  2. Retourner du texte simple. Ensuite, modifiez l'action Show() pour ceci:

    Snowfall.Web.Mvc/Controllers/EvenementsController.cs
    public IActionResult Show()
    {
    return Content("Vue Show de EvenementsController");
    }

En suivant les conventions, cela devrait rendre disponible l'action show sous l'URL /Evenements/Show

Tester l'action et la route

Testons si c'est bien le cas et que l'action Show() fonctionne bien.

  1. Lancer le projet en mode debug

  2. Naviguer à l'URL /Evenements/Show une fois le projet démarré dans le navigateur.

    Vous devriez voir ceci:

    http://localhost:5155/Evenements/Show

    Vue Show de EvenementsController

Passer un paramètre

Pour afficher un événement individuel, on imagine qu'il nous faudra un id ou une sorte d'identifiant unique à tout de moins pour savoir quel événement afficher.

Dans Program.cs, le gabarit de route peut nous renseigner sur le comportement par défaut d'une route:

Program.cs
app.MapControllerRoute(
name: "default",
pattern: "{controller=Evenements}/{action=Index}/{id?}");

Observez le paramètre optionnel à la fin: {id?}. En regardant cela, il devrait être possible d'accéder à une route via /Evenements/Show/1 et de récupérer le paramètre, mais comment?

Il suffit de passer en paramètre à la fonction Show() une variable nommée id.

  1. Modifiez la fonction Show() du contrôleur.Modifiez la fonction pour recevoir int id en paramètre:

    Snowfall.Web.Mvc/Controllers/EvenementsController.cs
    public IActionResult Show(int id)
    {
    return Content("Vue Show de EvenementsController, id: " + id);
    }

    Remarquez le paramètre id dans la définition de la fonction et ensuite la concaténation du paramètre au contenu affiché.

    info

    Les paramètres passés aux fonctions du contrôleur seront automatiquement associés aux paramètres présents dans l'URL, si ces derniers sont présents.

  2. Visitez l'URL suivante (même que tout à l'heure, mais avec un paramètre): /Evenements/Show/1

    Vous devriez voir ceci dans votre navigateur:

    http://localhost:5155/Evenements/Show/1

    Vue Show de EvenementsController, id: 1

    Le paramètre a bien été récupéré!