12 février 2014
3
12
/02
/février
/2014
12:26
Pour l’ajout et la modification :
- [AcceptVerbs(HttpVerbs.Post)]
- Vérification selon les contraintes, null, utilisation des expressions régulières pour vérifier le format (http://regexlib.com)
- Si l’entrée n’est pas correcte on ajoute une erreur au ModelState : ModelState.AddModelError("propriété", "texte à afficher à l’utilisateur");
- On vérifie que le model ne contient pas d’erreur pour l’ajout en base de données ModelState.IsValid
Ajout
Je crée une méthode ValidateClient
[AcceptVerbs(HttpVerbs.Post)] [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(Client client) { ValidateClient(client); if (ModelState.IsValid) { db.Clients.Add(client); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.CategoryId = new SelectList(db.Categories, "Id", "Name", client.CategoryId); return View(client); } private void ValidateClient(Client client) { if (string.IsNullOrWhiteSpace(client.Name)) ModelState.AddModelError("Name", "Nom requis."); if (!string.IsNullOrEmpty(client.Email)) if (!Regex.IsMatch(client.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")) ModelState.AddModelError("Email", "Email non valide."); } |
Modification (c’est la même chose)
[AcceptVerbs(HttpVerbs.Post)] [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(Client client) { ValidateClient(client); if (ModelState.IsValid) { db.Entry(client).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.CategoryId = new SelectList(db.Categories, "Id", "Name", client.CategoryId); return View(client); } |
Il est également possible de définir le message à afficher dans la vue.
Exemple
@Html.ValidationMessage("Name", "Veuilez entrer votre nom. ") |
Modifier le style des erreurs
Il est possible de modifier le style des erreurs affichées dans le fichier css
/* styles for validation helpers */ .field-validation-error { color: #e80c4d; font-weight: bold; } .field-validation-valid { display: none; } input.input-validation-error { border: 1px solid #e80c4d; } input[type="checkbox"].input-validation-error { border: 0 none; } .validation-summary-errors { color: #e80c4d; font-weight: bold; font-size: 1.1em; } .validation-summary-valid { display: none; } |
Si on veut ajouter un ValidationSummary à la page :
@Html.ValidationSummary()
Validation par attribut
System.ComponentModel.DataAnnotations http://msdn.microsoft.com/fr-fr/library/system.componentmodel.dataannotations(v=vs.110).aspx
Exemple dans la classe Client générée avec ADO.NET Entity Data Model
[Required(ErrorMessage = "Catégorie requise")] public int CategoryId { get; set; } |