2-8 Communiquer une liste à la vue
À l'étape précédente, un modèle était envoyé directement à la vue. Ainsi, la vue Index
ne contient qu'un seul élément et c'est ce dernier qui est passé à la vue pour être affiché.
Une action Index
retourne cependant généralement plusieurs éléments. Alors, comment envoie-t-on une liste?
Définir une liste
Pour retourner une liste, il nous faut premièrement la définir! Il est possible en C# de définir une liste, d'un certain type, de la façon suivante:
public IActionResult Index()
{
List<Evenement> evenements = new List<Evenement>()
//...
Ici, une variable evenements
, de type List<Evenement>
est créée. Le type de la variable est List
, et on précise via < >
le type d'objet ou de données que contiendra la liste.
Elle est ensuite initialisée via new List<Evenement>()
qui crée une liste vide.
Initialiser la liste avec des éléments
On peut initialiser la liste avec des valeurs par défaut de la façon suivante:
List<Evenement> evenements = new List<Evenement>()
{
new Evenement()
{
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()
{
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, // 50 personnes
Date = DateTime.Now + TimeSpan.FromDays(60), // dans 60 jours
Prix = new decimal(29.00), // 29$ l'inscription, en decimal
Ville = "Los Angeles, US",
},
};
Si nous avions déjà des objets de type Evenement
prédéfini, l'initialisation pourrait se faire de la façon suivante:
List<Evenement> evenements = new List<Evenement>()
{
evenement1,
evenement2,
};
Ceci dit, ce n'est pas notre cas pour le moment, donc modifions le contrôleur evenements
pour qu'il ressemble à ceci:
public IActionResult Index()
{
List<Evenement> evenements = new List<Evenement>()
{
new Evenement()
{
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()
{
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",
},
};
return View(evenements);
}
Remarquez que nous retournons View(evenements)
maintenant, donc la liste est envoyée à la vue.
Modifier la vue
Le contrôleur nous indique une erreur avec la variable evenements
envoyée. En effet, evenements
devrait être surligné en rouge, avec l'erreur suivante:
Argument type 'System.Collections.Generic.List<Snowfall.Web.Mvc.Models.Evenement>' is not assignable to model type 'Snowfall.Web.Mvc.Models.Evenement'
Pourquoi?
Eh bien, la vue Index
s'attend à recevoir comme modèle un objet de type Evenement
.
@model Evenement;
Remplacez la première ligne par le bon type, soit une liste d'événements:
@model List<Evenement>;
Mais maintenant... tout est en rouge!
Voyons dans la prochaine section comment afficher la liste via la syntaxe Razor pour les vues.