L'essentiel du MVC et des routes
Retour de contrôleur ActionResult
Type | Fonction | Description |
---|---|---|
ViewResult | View() | Pour retourner une vue |
PartialViewResult | PartialView() | Pour retourner une vue partielle |
NotFoundResult | NotFound() | Pour retourner une erreur 404 |
JsonResult | Json() | Pour sérialiser un objet en JSON |
RedirectResult | Redirect() | Pour rediriger vers une autre URL |
RedirectToActionResult | RedirectToAction() | Pour rediriger vers une action d'un contrôleur |
FileContentResult | File() | 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>