Aller au contenu principal

👹 Boss - Mighty View Controller

Dans le projet MVC, faites en sorte que:

  1. L'action Show() du contrôleur EvenementsController retourne une vue via View() plutôt que du texte via Content()
  2. Il vous faudra évidemment créer la vue associée, Show.cshtml
  3. Passer à la vue un modèle Evenement: ce dernier peut être évidemment codé en dur comme la liste d'événements de Index.
  4. Faites en sorte que la vue affiche les détails de l'événement (nom, description, etc.)
  5. Il vous faudra afficher l'id demandé quelque part dans la page

Bonus

  1. Déplacez la liste d'événements, déclarée directement dans la fonction Index(), pour qu'elle soit plutôt un attribut de la classe (en dehors de la fonction Index())
  2. Faites en sorte que Index() utilise la liste au niveau de la classe
  3. Pour l'événement retourné par la fonction Show(), récupérez l'événement dans la liste à partir du id passé en paramètre, plutôt que de retourner un événement codé en dur. Vous trouverez utile la fonction suivante:
Evenement evenement = Evenements.Find((e => e.Id == id));

Cheat Code

Vue Show
Show.cshtml
@model Evenement

@{
ViewBag.Title = Model.Nom;
Layout = "_Layout";
}

<h1>@Model.Nom - Id: @Model.Id</h1>

@if (@Model.ImagePath != null)
{
<img src="@Model.ImagePath" />
}
<p>@Model.Description</p>
<ul>
<li>Date: @Model.Date.ToShortDateString()</li>

@{
var classeBold = @Model.Capacite > 1000 ? "fw-bold" : null;
}
<li class="@classeBold">Capacité: @Model.Capacite</li>
<li>Prix: @Model.Prix</li>
</ul>
Contrôleur
EvenementsController.cs
using System.ComponentModel;
using Microsoft.AspNetCore.Mvc;
using Snowfall.Web.Mvc.Models;

namespace Snowfall.Web.Mvc.Controllers;

[Route("[controller]")]
public class EvenementsController : Controller
{
List<Evenement> Evenements = new List<Evenement>()
{
new Evenement()
{
Id = 1,
Nom = "Super Duper Événement LoL",
Description = "Compétition de League of Legends.",
Capacite = 1400, // 1400 personnes
Date = DateTime.Now + TimeSpan.FromDays(30), // dans 30 jours
Prix = new decimal(49.00), // 49$ l'inscription, en decimal
Ville = "Montreal, CA",
},
new Evenement()
{
Id = 2,
Nom = "Super Duper Événement Space Quest 6 Roger Wilco",
Description = "À quoi ressemblerait une compétition de Space Quest 6 est un mystère.",
Capacite = 50, // 1400 personnes
Date = DateTime.Now + TimeSpan.FromDays(60), // dans 60 jours
Prix = new decimal(29.00), // 29$ l'inscription, en decimal
Ville = "Los Angeles, US",
ImagePath = "https://via.placeholder.com/350x150",
},
};

[Route("/")]
public IActionResult Index()
{
return View(Evenements);
}

[HttpGet("{id:int}")]
public IActionResult Show(int id, string? option)
{
Evenement evenement = Evenements.Find((e => e.Id == id));
return View(evenement);
}

[HttpGet("{id:int}/edit")]
public IActionResult Edit(int id)
{
return Content("Vue Edit de EvenementsController, id: " + id);
}
}