ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de...

44
ASP.NET MVC : helpers Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 34

Transcript of ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de...

Page 1: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

ASP.NET MVC : helpers

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 34

Page 2: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Plan

1 Introduction

2 Les elements helpers

3 L’editeur

4 Validation de formulaires

H & H: Research and Training 2 / 34

Page 3: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Introduction

Les helpers

Les helpers, c’est quoi?

est une classe qui facilite et simplifie l’ecriture du code dans lesvues

permet de construire les elements HTML de la vue en fonctiondes attributs definis dans un modele

affecte egalement la valeur des elements HTML aux proprietes dumodele lors de la soumission d’un formulaire

H & H: Research and Training 3 / 34

Page 4: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Introduction

Les helpers

Pour cela

creer un controleur MVC 5 Controller Empty appelePersonneController

creer une vue (Empty) Index, associe au modele Personne,dans le repertoire Personne (associe au controleurPersonneController) situe dans Views

verifier la reference du modele Personne dans la vue

@model FirstAspNet.Models.Personne

H & H: Research and Training 4 / 34

Page 5: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Introduction

Les helpers

Contenu de PersonneController

namespace FirstAspNet.Controllers{

public class PersonneController : Controller{

// GET: Personnepublic ActionResult Index(){

return View();}

}}

H & H: Research and Training 5 / 34

Page 6: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Introduction

Les helpers

Modifions le contenu de PersonneController

namespace FirstAspNet.Controllers{

[RoutePrefix("Personne")]public class PersonneController : Controller{

[Route("Ajouter")]public ActionResult Index(){

return View();}

}}

H & H: Research and Training 6 / 34

Page 7: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour creer un lien

@Html.ActionLink("Ajouter une personne", "Ajouter")

L’equivalent en HTML

<a href="/Personne/Ajouter/">Ajouter une personne</a>

H & H: Research and Training 7 / 34

Page 8: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour ajouter une zone texte

@Html.TextBox("Nom", null)

L’equivalent en HTML

<input id="Nom" name="Nom" type="text" value="" />

On peut aussi ecrire en fonction d’une propriete du modele

@Html.TextBoxFor(perso => perso.Nom)

H & H: Research and Training 8 / 34

Page 9: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour ajouter une zone texte

@Html.TextBox("Nom", null)

L’equivalent en HTML

<input id="Nom" name="Nom" type="text" value="" />

On peut aussi ecrire en fonction d’une propriete du modele

@Html.TextBoxFor(perso => perso.Nom)

H & H: Research and Training 8 / 34

Page 10: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

On peut associer une classe CSS a la zone texte

@Html.TextBox("Nom", null, new { @class = "form-control" })

On peut aussi recuperer la valeur passee par le controleur etl’afficher dans la zone de texte

@Html.TextBox("Nom", @Model.Nom)

H & H: Research and Training 9 / 34

Page 11: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

On peut associer une classe CSS a la zone texte

@Html.TextBox("Nom", null, new { @class = "form-control" })

On peut aussi recuperer la valeur passee par le controleur etl’afficher dans la zone de texte

@Html.TextBox("Nom", @Model.Nom)

H & H: Research and Training 9 / 34

Page 12: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour associer un label a un element HTML

@Html.Label("Nom")

L’equivalent en HTML

<label for="Nom">Nom</label>

Pour associer au label une valeur differente du nom de l’element

@Html.Label("Nom", "Votre nom")

L’equivalent en HTML

<label for="Nom">Votre nom</label>

H & H: Research and Training 10 / 34

Page 13: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour associer un label a un element HTML

@Html.Label("Nom")

L’equivalent en HTML

<label for="Nom">Nom</label>

Pour associer au label une valeur differente du nom de l’element

@Html.Label("Nom", "Votre nom")

L’equivalent en HTML

<label for="Nom">Votre nom</label>

H & H: Research and Training 10 / 34

Page 14: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Autres elements helpers

@Html.TextArea(...) : pour les textarea HTML

@Html.CheckBox(...) : pour les cases a cocher

@Html.RadioButton(...) : pour les boutons radios

@Html.DropDownList(...) : pour les listes deroulantes

@Html.Hidden(...) : pour les champs caches

@Html.Password(...) : pour le type mot de passe

Pas de helpers pour le type bouton et submit

H & H: Research and Training 11 / 34

Page 15: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour declarer le debut d’un formulaire

@{Html.BeginForm("Ajouter", "Personne");}

L’equivalent en HTML

<form action="/Personne/Ajouter/" method="post">

Par defaut, la methode HTTP est post pour les formulaires. On peutla changer ainsi :

@{Html.BeginForm("Ajouter", "Personne", FormMethod.Get);}

H & H: Research and Training 12 / 34

Page 16: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour declarer le debut d’un formulaire

@{Html.BeginForm("Ajouter", "Personne");}

L’equivalent en HTML

<form action="/Personne/Ajouter/" method="post">

Par defaut, la methode HTTP est post pour les formulaires. On peutla changer ainsi :

@{Html.BeginForm("Ajouter", "Personne", FormMethod.Get);}

H & H: Research and Training 12 / 34

Page 17: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

Pour declarer la fin du formulaire

@{Html.EndForm();}

L’equivalent en HTML

</form>

H & H: Research and Training 13 / 34

Page 18: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Les elements helpers

Les helpers

On peut simplifier la declaration d’un formulaire

@using (Html.BeginForm("Ajouter", "Personne")){

...}

H & H: Research and Training 14 / 34

Page 19: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

Editor

un outil qui permet la construction d’un formulaire en fonction detype d’attribut declare dans le modele

H & H: Research and Training 15 / 34

Page 20: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

Considerons le modele Personne suivant :

public class Personne{

public int Num { get; set; }public string Nom { get; set; }public string Prenom { get; set; }public bool Sportif { get; set; }

}

H & H: Research and Training 16 / 34

Page 21: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

Utilisation d’Editor pour la construction du formulaire

Num : @Html.Editor("Num")Nom : @Html.Editor("Nom")Prenom : @Html.Editor("Prenom")Sportif : @Html.Editor("Sportif")

Ou en utilisant la fonction lambda

Num : @Html.EditorFor(p => p.Num)Nom : @Html.EditorFor(p => p.Nom)Prenom : @Html.EditorFor(p => p.Prenom)Sportif : @Html.EditorFor(p => p.Sportif)

H & H: Research and Training 17 / 34

Page 22: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

Utilisation d’Editor pour la construction du formulaire

Num : @Html.Editor("Num")Nom : @Html.Editor("Nom")Prenom : @Html.Editor("Prenom")Sportif : @Html.Editor("Sportif")

Ou en utilisant la fonction lambda

Num : @Html.EditorFor(p => p.Num)Nom : @Html.EditorFor(p => p.Nom)Prenom : @Html.EditorFor(p => p.Prenom)Sportif : @Html.EditorFor(p => p.Sportif)

H & H: Research and Training 17 / 34

Page 23: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

L’equivalent en HTML

Num : <input class="text-box single-line" data-val="true" data-val-number="Le champ Num doit etre unnombre." data-val-required="Le champ Num estrequis." id="Num" name="Num" type="number" value="" />

Nom : <input class="text-box single-line" id="Nom"name="Nom" type="text" value="" />

Prenom : <input class="text-box single-line" id="Prenom" name="Prenom" type="text" value="" />

Sportif : <input class="check-box" data-val="true"data-val-required="Le champ Sportif est requis."id="Sportif" name="Sportif" type="checkbox" value="true" /><input name="Sportif" type="hidden"value="false" />

H & H: Research and Training 18 / 34

Page 24: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

data-val-required, data-val-number... seront detaillees dansla partie validation

H & H: Research and Training 19 / 34

Page 25: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

Transformation

un attribut de type int sera transforme en number de HTML

un attribut de type bool sera transforme en checkbox de HTML

un attribut de type string sera transforme en text de HTML

un attribut de type decimal, float sera transforme en textde HTML

H & H: Research and Training 20 / 34

Page 26: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpersOn peut aussi faire

@using (Html.BeginForm("Ajouter", "Personne")){

@Html.DisplayNameFor(model => model.Num);@Html.Editor("Num", null);@Html.DisplayNameFor(model => model.Nom);@Html.Editor("Nom");@Html.DisplayNameFor(model => model.Prenom);@Html.Editor("Prenom");@Html.DisplayNameFor(model => model.Sportif);@Html.Editor("Sportif");<input type="submit" value="Ajouter" />

}

Ce formulaire sera envoye a une action (Ajouter) du controleur(PersonneController) qui accepte les requetes Http de type post et quiprend en parametre un objet du modele Personne (contenant les valeursenvoyees par le formulaire)

H & H: Research and Training 21 / 34

Page 27: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpersOn peut aussi faire

@using (Html.BeginForm("Ajouter", "Personne")){

@Html.DisplayNameFor(model => model.Num);@Html.Editor("Num", null);@Html.DisplayNameFor(model => model.Nom);@Html.Editor("Nom");@Html.DisplayNameFor(model => model.Prenom);@Html.Editor("Prenom");@Html.DisplayNameFor(model => model.Sportif);@Html.Editor("Sportif");<input type="submit" value="Ajouter" />

}

Ce formulaire sera envoye a une action (Ajouter) du controleur(PersonneController) qui accepte les requetes Http de type post et quiprend en parametre un objet du modele Personne (contenant les valeursenvoyees par le formulaire)

H & H: Research and Training 21 / 34

Page 28: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

La methode Ajouter du controleur PersonneController

[HttpPost][Route("Ajouter")]public String Ajouter(Personne p){

return $"Personne { p.Prenom } { p.Nom } a bienete ajoutee";

}

[HttpPost] : pour indiquer que cette action serait executee a lareception d’une requete Http de type post

(Personne p) : pour recuperer les valeurs soumises du formulairedans un objet de type Personne

H & H: Research and Training 22 / 34

Page 29: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

La methode Ajouter du controleur PersonneController

[HttpPost][Route("Ajouter")]public String Ajouter(Personne p){

return $"Personne { p.Prenom } { p.Nom } a bienete ajoutee";

}

[HttpPost] : pour indiquer que cette action serait executee a lareception d’une requete Http de type post

(Personne p) : pour recuperer les valeurs soumises du formulairedans un objet de type Personne

H & H: Research and Training 22 / 34

Page 30: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

L’editeur

Les helpers

La methode Ajouter du controleur PersonneController

[HttpPost][Route("Ajouter")]public String Ajouter(Personne p){

return $"Personne { p.Prenom } { p.Nom } a bienete ajoutee";

}

[HttpPost] : pour indiquer que cette action serait executee a lareception d’une requete Http de type post

(Personne p) : pour recuperer les valeurs soumises du formulairedans un objet de type Personne

H & H: Research and Training 22 / 34

Page 31: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Pour controler la saisie des utilisateurs

Definir les contraintes sous forme de decorateur dans le modele(les entites)

Preparer les messages a afficher en cas de violation d’unecontrainte

Dans le controleur, tester que ces contraintes sont satisfaitesavant d’envoyer les donnees a la base de donnees.

H & H: Research and Training 23 / 34

Page 32: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Ajoutons les decorateurs dans l’entite Personne

public class Personne{

[Range(0, 1000)]public int Num { get; set; }[Required]public string Nom { get; set; }[MinLength(2)]public string Prenom { get; set; }public bool Sportif { get; set; }

}

H & H: Research and Training 24 / 34

Page 33: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpersPreparer l’affichage de message de validation dans la vueIndex.cshtml

@using (Html.BeginForm("Ajouter", "Personne")){

@Html.DisplayNameFor(model => model.Num);@Html.Editor("Num");<br />@Html.ValidationMessage("Num", "")@Html.DisplayNameFor(model => model.Nom);<br />@Html.Editor("Nom");<br />@Html.ValidationMessage("Nom", "")<br />@Html.DisplayNameFor(model => model.Prenom);@Html.Editor("Prenom");<br />@Html.ValidationMessage("Prenom", "")<br />@Html.DisplayNameFor(model => model.Sportif);@Html.Editor("Sportif");<br /><input type="submit" value="Ajouter" />

}

H & H: Research and Training 25 / 34

Page 34: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

De la meme maniere, on peut aussi utiliser les expressionslambda avec @Html.ValidationMessageFor()

@using (Html.BeginForm("Ajouter", "Personne")){

@Html.DisplayNameFor(model => model.Num);@Html.EditorFor(model => model.Num);<br />@Html.ValidationMessageFor(model => model.Num)

...}

H & H: Research and Training 26 / 34

Page 35: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpersDans le controleur

public ActionResult Index(){

return View();}[HttpPost]public ActionResult Ajouter(Personne p){

if (ModelState.IsValid){

// persister les donneesreturn RedirectToAction("Index");

}// afficher la meme vue avec les messages d’erreur et

les valeurs saisiesreturn View("Index",p);

}

H & H: Research and Training 27 / 34

Page 36: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Pour tester, aller sur la route /Personne/Index

Si on saisit un numero superieur a 1000

Ou si on ne saisit pas de nom

Ou si on saisit une seule lettre pour le prenom

Alors un message d’erreur sera affiche (un message pardefaut, qu’on n’a jamais prepare)

H & H: Research and Training 28 / 34

Page 37: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Pour personnaliser les messages d’erreur

public class Personne{

[Range(0, 1000)]public int Num { get; set; }[Required(ErrorMessage = "Merci de saisir le nom")]public string Nom { get; set; }[MinLength(2, ErrorMessage = "Au moins deux caracteres")]public string Prenom { get; set; }public bool Sportif { get; set; }

}

Pour les decorateurs de validation, il faut utiliser l’espace de noms suivant :

using System.ComponentModel.DataAnnotations;

H & H: Research and Training 29 / 34

Page 38: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Pour personnaliser les messages d’erreur

public class Personne{

[Range(0, 1000)]public int Num { get; set; }[Required(ErrorMessage = "Merci de saisir le nom")]public string Nom { get; set; }[MinLength(2, ErrorMessage = "Au moins deux caracteres")]public string Prenom { get; set; }public bool Sportif { get; set; }

}

Pour les decorateurs de validation, il faut utiliser l’espace de noms suivant :

using System.ComponentModel.DataAnnotations;

H & H: Research and Training 29 / 34

Page 39: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpersOn peut aussi ajouter certains details dans le message d’erreur

public class Personne{

[Range(0, 1000,ErrorMessage ="Le champ {0} doit etre compris entre{1} et {2}")]

public int Num { get; set; }[Required(ErrorMessage = "Merci de saisir le nom")]public string Nom { get; set; }[MinLength(2, ErrorMessage = "Au moins deux caracteres")]public string Prenom { get; set; }public bool Sportif { get; set; }

}

Le champ {0} doit etre compris entre {1} et {2}

{0} : fait reference au nom du champ (ici Num)

{1} : fait reference a la borne inferieure de l’intervalle (ici 0)

{2} : fait reference a la borne superieure de l’intervalle (ici 1000)

H & H: Research and Training 30 / 34

Page 40: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpersOn peut aussi ajouter certains details dans le message d’erreur

public class Personne{

[Range(0, 1000,ErrorMessage ="Le champ {0} doit etre compris entre{1} et {2}")]

public int Num { get; set; }[Required(ErrorMessage = "Merci de saisir le nom")]public string Nom { get; set; }[MinLength(2, ErrorMessage = "Au moins deux caracteres")]public string Prenom { get; set; }public bool Sportif { get; set; }

}

Le champ {0} doit etre compris entre {1} et {2}

{0} : fait reference au nom du champ (ici Num)

{1} : fait reference a la borne inferieure de l’intervalle (ici 0)

{2} : fait reference a la borne superieure de l’intervalle (ici 1000)

H & H: Research and Training 30 / 34

Page 41: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Autres contraintes de validation de formulaire

CreditCard : permet de specifier que la valeur de cet attributdoit correspondre a un numero de carte bancaire

EmailAddress : permet de specifier que la valeur de cet attributdoit correspondre a une adresse e-mail

MaxLength : precise le nombre de caractere max que peut avoircet attribut

RegularExpression() : determine en utilisant une expressionreguliere ce qu’un champ peut accepter([RegularExpression(@"ˆ0[0-9]{9}$")] permet de validerun numero de telephone francais)

...

H & H: Research and Training 31 / 34

Page 42: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpersOn peut aussi retourner le message d’erreur dans le controleur si lenom existe dans la base de donnees par exemple

[HttpPost]public ActionResult Ajouter(Personne p){

if (// tester si le nom existe dans la BD){

ModelState.AddModelError("Nom", "Ce nom existedans la BD");

return View("Index",p);}if (ModelState.IsValid ){

// persister les donneesreturn RedirectToAction("Index");

}return View("Index",p);

}

H & H: Research and Training 32 / 34

Page 43: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpersLes proprietes generees dans les vues

data-val : contient true si le champ est soumis a validation

data-val-length : contient le message a afficher si lacontrainte sur la longueur est violee

data-val-length-max : contient la longueur max qu’un champpeut avoir

data-val-required : contient le message a afficher si lechamps soumis est vide

data-valmsg-for : precise le champ concerne (cet attribut estgenere dans une balise span)

data-valmsg-replace : contient true si le message devalidation a ete remplace par un message personnalise...

H & H: Research and Training 33 / 34

Page 44: ASP.NET MVC : helpers · 2020. 7. 26. · ASP.NET MVC: helpers Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

© Achref EL MOUELHI ©

Validation de formulaires

Les helpers

Pour utiliser un affichage ordonne des erreurs, on peut [email protected]

@Html.ValidationSummary(false, "")@using (Html.BeginForm("Ajouter", "Personne")){

@Html.DisplayNameFor(model => model.Num);@Html.Editor("Num");<br />@Html.DisplayNameFor(model => model.Nom);<br />@Html.Editor("Nom");<br />@Html.DisplayNameFor(model => model.Prenom);@Html.Editor("Prenom");<br />@Html.DisplayNameFor(model => model.Sportif);@Html.Editor("Sportif");<br /><input type="submit" value="Ajouter" />

}

H & H: Research and Training 34 / 34