Vous êtes sur la page 1sur 35

Développement Web

côté serveur avec ASP.NET


Module 5 - ASP.NET Razor
Développement Web côté serveur avec ASP.NET

Objectifs
• Savoir utiliser la syntaxe Razor
• Savoir passer des informations du serveur à la vue
• Savoir créer des vues et des contrôleurs
avec le wizard de Visual Studio
• Comprendre et utiliser les formulaires
Développement Web côté serveur avec ASP.NET
La syntaxe Razor

• Fichiers .cshtml (HTML + C#)


• @ indique du code serveur
• Déclaration :
@{ int pos = 7; }
@{ var myMessage = "Hello World!"; }
@{ var today = DateTime.Today; }
• Utilisation :
<p>@myMessage</p>

• Commentaire :
@* A one-line code comment. *@
Développement Web côté serveur avec ASP.NET
La syntaxe Razor

• Conditionnelles
@if (myMessage == "valeur")
{
<p>Hello !</p>
} else {
<p>@myMessage</p>
}

• Boucles
@for (var i = 0; i < 10; i++) { @foreach (var element in ensemble) {
<p>...</p> <p>@element</p>
} }
Développement Web côté serveur avec ASP.NET

-Démonstration-
La syntaxe Razor
Développement Web côté serveur avec ASP.NET
Passer des informations du contrôleur à la vue

• ViewBag

• TempData

• Une classe
Développement Web côté serveur avec ASP.NET
Passer des informations du contrôleur à la vue

• ViewBag
• Dans le contrôleur :
public ActionResult AfficherMessage(string nom)
{
ViewBag.Message = nom;
return View();
}

• Coté vue :
@ViewBag.Message
• Ne supporte pas les redirections
Développement Web côté serveur avec ASP.NET
Passer des informations du contrôleur à la vue

• TempData
• Dans le contrôleur :
public ActionResult AfficherMessage(string nom)
{
TempData["Message"] = nom;
return View();
}

• Coté vue :
@TempData["Message"]
• Supporte les redirections
Développement Web côté serveur avec ASP.NET
Passer des informations du contrôleur à la vue

• Une classe
• Dans le dossier Models
public class MessageVM {
public string? Message { get; set; }
}

• Dans le contrôleur
public IActionResult AfficherMessage(string nom) {
MessageVM m = new MessageVM { Message = nom };
return View(m);
}
Développement Web côté serveur avec ASP.NET
Passer des informations du contrôleur à la vue

• Une classe

• Dans la vue :
@model siteWeb.Models.MessageVM <= déclaration
@Model.Message <= utilisation
Développement Web côté serveur avec ASP.NET
Passer des informations du contrôleur à la vue
Développement Web côté serveur avec ASP.NET

-Démonstration-
Passer des
informations du
Contrôleur à la vue
Développement Web côté serveur avec ASP.NET
Simplification d’écriture pour produire du HTML

• HtmlHelper
@Html.ActionLink("Apprentissage", "Apprendre", "Cours",
new { area = "" }, new { @class = "navbar-brand" })

<a class="navbar-brand" href="/Cours/Apprendre">Apprentissage</a>

• Progressivement remplacés par les TagHelpers


Développement Web côté serveur avec ASP.NET
Simplification d’écriture pour produire du HTML

• TagHelper
<a class="navbar-brand" asp-area="" asp-controller="Cours"
asp-action="Apprendre">Apprentissage</a>

<a class="navbar-brand" href="/Cours/Apprendre">Apprentissage</a>

• Possibilité de créer vos propres TagHelpers :

https://docs.microsoft.com/fr-fr/aspnet/core/mvc/views/tag-helpers
Développement Web côté serveur avec ASP.NET
Génération des vues et des contrôleurs par Visual Studio

• Création d’un Modèle


• Génération d’un Contrôleur
• Génération des Vues
Développement Web côté serveur avec ASP.NET

-Démonstration-
Génération des vues et
des contrôleurs
par Visual Studio
Développement Web côté serveur avec ASP.NET

TP Chats
TP
Développement Web côté serveur avec ASP.NET
Les vues partielles

Personne
Id : int
Nom : string
Prenom : string
Delete.cshtml Details.cshtml
Code spécifique à la vue Delete Code spécifique à la vue Details
… …
Affichage de l’élément Personne Affichage de l’élément Personne
… …

_Personne.cshtml

Affichage de l’élément Personne


Développement Web côté serveur avec ASP.NET
Les vues partielles

Delete.cshtml
Personne
Details.cshtml Id : int
Code spécifique à la vue Delete Code spécifique à la vue Details Nom : string
… … Prenom : string
<partial name="_personne" /> <partial name="_personne" />
… …

_personne.cshtml @model Personne


<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Nom)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Nom)
</dd>
Développement Web côté serveur avec ASP.NET

-Démonstration-
Les vues partielles
Développement Web côté serveur avec ASP.NET
Les formulaires

Client
Serveur
GET Personne/Edit/id

Edit.cshtml Personne
Développement Web côté serveur avec ASP.NET
Les formulaires

Client
Serveur
POST Personne/Edit/id
Id: 1
Nom: BRISEBOIS
Prenom: Lorraine
Age: 22

Redirection vers une autre page


Développement Web côté serveur avec ASP.NET
Les formulaires

// GET: Personne/Edit/5
public ActionResult Edit(int id) {
Personne? persAModif = _personnes.FirstOrDefault(p => p.Id == id);
if (persAModif == null)
return NotFound();
return View(persAModif);
}
Développement Web côté serveur avec ASP.NET
Les formulaires

// POST: Personne/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, Personne personne) {
try {
Personne? persAModif = _personnes.FirstOrDefault(p => p.Id == id);
if(persAModif == null) { return NotFound(); }
persAModif.Nom = personne.Nom;
return RedirectToAction(nameof(Index));
} catch { return View(personne); }
}
Développement Web côté serveur avec ASP.NET
Les formulaires

• TagHelper <form>
• Principaux attributs :
• asp-action
• asp-controller
• asp-route-{value}

<form asp-action="Create">
<partial name="_form" />
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
Développement Web côté serveur avec ASP.NET
Les formulaires

• TagHelper <label> et <input>


• Attributs :
• asp-for

<div class="form-group">
<label asp-for="Nom" class="control-label"></label>
<input asp-for="Nom" class="form-control" />
<span asp-validation-for="Nom" class="text-danger"></span>
</div>
Développement Web côté serveur avec ASP.NET

-Démonstration-
Les formulaires
Développement Web côté serveur avec ASP.NET

TP Pizza – partie 1
TP
Développement Web côté serveur avec ASP.NET
La validation des formulaires - Annotations

• Les annotations
• [Required]
• [StringLength]
• [EmailAddress]
• [Range]
• [RegularExpression]
• …
• Exemples :
[Required]
[StringLength(30, MinimumLength = 2)]
public string Nom { get; set; }
Développement Web côté serveur avec ASP.NET
La validation des formulaires – Message d’erreur pour une annotation

• Propriété ErrorMessage
• Exemple :
[Required(ErrorMessage =
"Le nom d'une personne doit nécessairement être renseigné")]
[StringLength(30, MinimumLength = 2,
ErrorMessage = "Le nom doit comporter entre {2} et {1} caractères")]

You can use composite formatting placeholders in the error message: {0} is the name of the
property; {1} is the maximum length; and {2} is the minimum length. The placeholders
correspond to arguments that are passed to the String.Format method at runtime.
La validation des formulaires – Côté client
La validation des formulaires – Côté client

• Validation avec JQuery Validation


<span asp-validation-for="Nom" class="text-
danger"></span>
Développement Web côté serveur avec ASP.NET
La validation des formulaires – Côté serveur

• ModelState.IsValid

public ActionResult Create(Personne personne) {


try {
if(ModelState.IsValid) {
personne.Id = _id++;
_personnes.Add(personne);
return RedirectToAction(nameof(Index));
} else { return View(personne); }
} catch { return View(personne); }
}
Développement Web côté serveur avec ASP.NET
La validation des formulaires – Côté serveur

• ModelState.AddModelError

if(_personnes.Any(p => p.Nom == personne.Nom)) {


ModelState.AddModelError("Nom",
"Une personne a déjà été enregistrée avec ce nom");
return View(personne);
}
Développement Web côté serveur avec ASP.NET

TP Pizza – partie 2
TP
Développement Web côté serveur avec ASP.NET
Conclusion

• La syntaxe Razor
• Le passage des informations du serveur à la vue
• La création des vues et des contrôleurs avec le wizard de Visual
Studio
• Les formulaires

Vous aimerez peut-être aussi