10-4 Utiliser d'un ViewModel dans la vue
Le compilateur vous a probablement déjà averti que vous êtes en train d'envoyer à la vue Index un objet du mauvais type.
En effet, dans le haut de la vue Index.cshtml, on indique que la variable @model est de type List<Evenement>:
@model List<Evenement>;
Cependant, ce n'est plus le cas, la vue reçoit plutôt un objet de type EvenementsIndexViewModel.
Adapter Index.cshtml pour utiliser le ViewModel
-
Ajouter
Snowfall.Web.Mvc.Models.EvenementsauViewImports_. Cette étape est optionnelle, mais pour simplifier les importations dans les fichiers de vues, on peut ajouter leusingen surbrillance au fichier_ViewImports.Snowfall.Web.Mvc/Views/_ViewImports.cshtml@using Snowfall.Web.Mvc
@using Snowfall.Web.Mvc.Models
@using Snowfall.Domain.Models
@using Snowfall.Web.Mvc.Models.Evenements
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers -
Remplacer le modèle associé à la vue. Dans
Index.cshtml, remplacez la ligne suivante pour changer le type de modèle attendu par la vue:Snowfall.Web.Mvc/Views/Evenements/Index.cshtml@model List<Evenement>;Par celle-ci:
Snowfall.Web.Mvc/Views/Evenements/Index.cshtml@model EvenementsIndexViewModelDe cette façon, on vient lier la vue au bon type de modèle, soit
EvenementsIndexViewModel. -
Remplacez
ModelparModel.Evenementsdans la boucleforeachdes événements.Snowfall.Web.Mvc/Views/Evenements/Index.cshtml@foreach (Evenement evenement in Model.Evenements)
{
<partial name="_Evenement" model="evenement"/>
}Model.Evenementsfait référence à la propriétéEvenementsdeEvenementsIndexViewModelqui contient la liste des événements.
Adapter la vue partielle _Villes pour utiliser le ViewModel
La vue partielle _Villes utilise toujours une liste statique de villes. Réglons ce problème!
-
Passez à la vue partielle la liste de villes contenue dans le
ViewModel.Snowfall.Web.Mvc/Views/Evenements/Index.cshtml<div class="col-lg-3 mb-4">
<partial name="_Villes" model="Model.Villes" />
</div> -
Associez à la vue partielle
_Villesle bon modèle, soit une liste de villes.Snowfall.Web.Mvc/Views/Evenements/_Villes.cshtml@model List<Ville>
<h6 class="text-uppercase">Filtrer par ville</h6>
<div class="list-group">
<a class="list-group-item list-group-item-action" href="#">Montreal, CA</a>
<a class="list-group-item list-group-item-action" href="#">Los Angeles, US</a>
<a class="list-group-item list-group-item-action" href="#">Berlin, DE</a>
<a class="list-group-item list-group-item-action" href="#">Paris, FR</a>
<a class="list-group-item list-group-item-action" href="#">Tokyo, JP</a>
<a class="list-group-item list-group-item-action" href="#">Sydney, AU</a>
</div> -
Finalement, remplacez la liste statique par une boucle
foreachsur le modèle de la vue partielle (liste de villes).Snowfall.Web.Mvc/Views/Evenements/_Villes.cshtml@model List<Ville>
<h6 class="text-uppercase">Filtrer par ville</h6>
<div class="list-group">
@foreach (Ville ville in Model)
{
<a class="list-group-item list-group-item-action" href="#">@ville.Nom, @ville.PaysIso</a>
}
</div> -
Lancez le projet!
