Aller au contenu principal

L'essentiel du MVC et des routes

Retour de contrôleur ActionResult

TypeFonctionDescription
ViewResultView()Pour retourner une vue
PartialViewResultPartialView()Pour retourner une vue partielle
NotFoundResultNotFound()Pour retourner une erreur 404
JsonResultJson()Pour sérialiser un objet en JSON
RedirectResultRedirect()Pour rediriger vers une autre URL
RedirectToActionResultRedirectToAction()Pour rediriger vers une action d'un contrôleur
FileContentResultFile()Pour retourner un fichier

Paramètres d'action

On peut utiliser un paramètre d'action...

  • Directement dans l'URL: /evenements/1, /evenements/1/edit
  • Via querystring: /evenements/1?option=vip

On récupère le ou les paramètres via les paramètres de fonction de l'action.

public IActionResult Show(int id, string? option)
{
return Content($"Vue Show de EvenementsController, id: {id}, option: {option}");
}

Configurer une route

En utilisant l'attribut [Route()]

[HttpGet("evenements/{id:int}")]
public IActionResult Show(int id, string? option)

Préfixe de route au niveau du contrôleur

Lorsque toutes les actions partagent le même préfixe (ex.: /evenements), on peut préciser la route au niveau du contrôleur:

[Route("[controller]")]
public class EvenementsController : Controller

Le préfixe portera le nom du contrôleur.

Ensuite, pour les actions individuelles:

[HttpGet("{id:int}")]
public IActionResult Show(int id, string? option)

Route racine

Pour associer une action à la racine du site:

[Route("/")]
public IActionResult Index()

Communiquer des données à la vue

La méthode à privilégier est d'utiliser le paramètre de la fonction View()

return View(evenement);

On peut aussi utiliser ViewBag, mais à éviter lorsque possible.

ViewBag["option"] = "vip";

Syntaxe Razor

foreach

@foreach (Evenement evenement in Model)
{
//...
}

if

@if (@Model.ImagePath != null)
{
//...
}

Code arbitraire

@{
var classeBold = @Model.Capacite > 1000 ? "fw-bold" : null;
}

Vues partielles

<partial name="_Evenement" model="evenement"/>

Liens

<a asp-controller="Evenements" asp-action="Show" asp-route-id="@Model.Id">Détails</a>