Développement d’une application de gestion de contacts avec asp. Net mvc (C#)








télécharger 48.08 Kb.
titreDéveloppement d’une application de gestion de contacts avec asp. Net mvc (C#)
date de publication06.11.2016
taille48.08 Kb.
typeDocumentos
ar.21-bal.com > loi > Documentos
Haut du formulaire

Développement d’une application de gestion de contacts avec ASP.NET MVC (C#)

Etape #3 – Ajout de la validation de formulaires


Dans cette série de tutoriaux, nous allons construire de bout en bout une application complète de gestion de contacts. Cette application vous permettra de stocker les informations – noms, numéro de téléphone et adresses emails – pour une liste de personnes.

Nous allons construire cette application à travers plusieurs étapes. Chacune d’entres elles allant enrichir notre application MVC. Le but de cette construction par étape est de vous permettre de comprendre la raison derrière chaque changement.

  • Etape #1 – Création de l’application. Dans cette 1ère étape, nous allons créer l’application de gestion de contacts de la manière la plus simple qui soit. Nous allons mettre en place le support d’opérations classiques vers la base de données : création, lecture, mise à jour et suppression d’enregistrements.

  • Etape #2 – Rendre l’application plus attrayante. Ici, nous allons améliorer l’apparence de l’application en modifiant la page maitre par défaut d’ASP.NET MVC ainsi que le CSS l’accompagnant.

  • Etape #3 – Ajout de la validation de formulaires. Dans cette 3ème étape, nous allons ajouter une logique simple de validation. Nous allons empêcher les utilisateurs de soumettre un formulaire sans remplir certains champs obligatoires. Nous allons également valider les adresses email et numéros de téléphone.

  • Etape #4 – Rendre l’application faiblement couplée. Ici, nous allons profiter de plusieurs modèles de développement logiciel (Design Patterns) pour maintenir et modifier plus facilement notre application. Par exemple, nous allons revoir l’application pour utiliser 2 patterns connus sous le nom de « Repository pattern » et « Dependency Injection pattern »

  • Etape #5 – Créer des tests unitaires. Dans cette 5ème étape, afin de rendre encore plus simple la gestion du code source, nous allons ajouter des tests unitaires. Nous allons utiliser pour cela un « Mock Object Framework » puis fabriquer des tests unitaires pour nos contrôleurs et logiques de validation.

  • Etape #6 – Utiliser un développement guidé par les tests. Ici, nous allons ajouter de nouvelles fonctionnalités d’abord en écrivant des tests unitaires puis ensuite en écrivant du code pour ces mêmes tests unitaires. Dans cette étape, nous allons ajouter la notion de groupes de contacts.

  • Etape #7 – Ajouter le support d’Ajax. Dans cette dernière phase, nous allons améliorer la réponse et la performance de notre application en y ajoutant le support d’Ajax.

Développer une application de gestion de contacts avec ASP.NET MVC (C#)


Lire et télécharger les tutoriels : http://msdn.microsoft.com/fr-fr/asp.net/dd627541.aspx

Dans cette étape


Dans cette 3ème étape dans la fabrication de notre application Contact Manager, nous allons ajouter une logique simple de validation de formulaires. Nous souhaitons éviter de laisser les utilisateurs soumettre un nouveau contact sans rentrer d’abord des valeurs dans les champs obligatoires. Nous souhaitons également valider la bonne constitution des numéros de téléphone et des adresses emails proposés (Figure 1).

the new project dialog box

Figure 01: Un formulaire avec une logique de validation en place

Dans cette étape, nous allons ajouter la logique de validation directement au sein des actions contrôleurs. En général, cela n’est pas la méthode recommandée pour ajouter une forme de validation dans une application ASP.NET MVC. Une meilleure approche serait de mettre en place une logique de validation applicative dans une couche de service séparée. Justement, dans l’étape suivante, nous nous occuperons de revoir l’architecture de notre application pour faciliter les opérations de maintenance.

Par ailleurs, toujours afin de rester pour l’instant assez simple, nous allons écrire l’ensemble du code de validation à la main. Au lieu de l’écrire nous-mêmes, on pourrait envisager de bénéficier d’un framework de validation. Par exemple, on peut utiliser Microsoft Entreprise Library Validation Application Block (VAB) pour implémenter la logique de validation au sein d’ASP.NET MVC. Pour en savoir davantage sur Validation Application Block, rendez-vous ici : http://msdn.microsoft.com/en-us/library/dd203099.aspx

Ajout de validations à la vue de création


Commençons par ajouter de la logique de validation à la vue de création de contacts. Heureusement, comme nous avons généré la vue avec Visual Studio, elle contient déjà toute la logique nécessaire à l’affichage de messages de validation au niveau de l’interface graphique. La vue de création est présentée dans le Listing 1.

Listing 1 – \Views\Contact\Create.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>


Create



<%= Html.ValidationSummary() %>
<% using (Html.BeginForm()) {%>


Create New Contact




<%= Html.TextBox("FirstName") %>

<%= Html.ValidationMessage("FirstName", "*") %>



<%= Html.TextBox("LastName") %>

<%= Html.ValidationMessage("LastName", "*") %>



<%= Html.TextBox("Phone") %>

<%= Html.ValidationMessage("Phone", "*") %>



<%= Html.TextBox("Email") %>

<%= Html.ValidationMessage("Email", "*") %>





<% } %>


Noter l’appel à la méthode Html.ValidationSummary() juste au dessus du formulaire HTML. S’il y a la moindre erreur de validation levée, alors cette méthode affiche l’ensemble des messages dans une liste à puce.

Notez également l’appel à la méthode Html.ValidationMessage() qui apparaît prêt de chaque champs du formulaire. La méthode ValidationMessage() affiche un message particulier d’erreur de validation. Dans le cas du Listing 1, une étoile est affichée lorsqu’une erreur de validation est rencontrée.

Pour terminer, la méthode Html.TextBox() génère automatiquement une feuille de style CSS lorsqu’il y a une erreur de validation associée à la propriété affichée. Html.TextBox() génère une classe appelée input-validation-error.

Lorsque vous créez une nouvelle application ASP.NET MVC, une feuille de style appelée Site.css est créée automatiquement dans le répertoire Content. Cette feuille de style contient les définitions suivantes pour les classes CSS liées à l’apparence des messages d’erreur de validation :

.field-validation-error

{

color: #ff0000;

}
.input-validation-error

{

border: 1px solid #ff0000;

background-color: #ffeeee;

}
.validation-summary-errors

{

font-weight: bold;

color: #ff0000;

}

La classe field-validation-error est utilisée pour contrôler l’apparence de ce qui est produit par la méthode Html.ValidationMessage(). La classe The input-validation-error est utilisée pour contrôler le style de la zone de saisie de texte rendue par la méthode Html.TextBox(). Enfin, la classe validation-summary-errors est utilisée pour contrôler le style de la liste non ordonnée rendue par la méthode the Html.ValidationSummary().

Vous pouvez modifier les classes de la feuille de style décrite dans cette section pour personnaliser l’apparence des messages d’erreur de validation.

Ajout d’une logique de validation à l’action de création


Jusqu’à présent, la vue de création n’a jamais affiché de message d’erreur de validation car nous n’avons pas écrit la logique pour générer ces messages. Pour afficher des messages d’erreur de validation, vous devez d’abord les ajouter à l’objet ModelState.

La méthode UpdateModel() ajoute automatiquement des messages d’erreur à l’objet ModelState s’il y a une erreur simple d’assignation d’une valeur du formulaire vers une propriété. Par exemple, si vous essayez d’affecter la chaîne « pomme » vers une propriété DateAnniversaire de type DateTime alors la méthode UpdateModel() sera appelée pour ajouter une erreur à ModelState.

La version modifiée de la méthode Create() dans le Listing 2 contient une nouvelle section qui s’occupe de valider les propriétés de l’objet Contact fourni avant de tenter de l’insérer dans la base de données.

Listing 2 – Controllers\ContactController.cs (création avec validation)

//

// POST: /Contact/Create
[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Create([Bind(Exclude = "Id")] Contact contactToCreate)

{

// Validation logic

if (contactToCreate.FirstName.Trim().Length == 0)

ModelState.AddModelError("FirstName", "First name is required.");

if (contactToCreate.LastName.Trim().Length == 0)

ModelState.AddModelError("LastName", "Last name is required.");

if (contactToCreate.Phone.Length > 0 && !Regex.IsMatch(contactToCreate.Phone, @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"))

ModelState.AddModelError("Phone", "Invalid phone number.");

if (contactToCreate.Email.Length > 0 && !Regex.IsMatch(contactToCreate.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"))

ModelState.AddModelError("Email", "Invalid email address.");

if (!ModelState.IsValid)

return View();
// Database logic

try

{

_entities.AddToContactSet(contactToCreate);

_entities.SaveChanges();

return RedirectToAction("Index");

}

catch

{

return View();

}

}

La section de validation applique 4 règles distinctes:

  • La propriété FirstName (prénom) doit avoir une taille supérieure à 0 (et ne peut être constituée uniquement de caractères vides).

  • La propriété LastName (nom) doit également avoir une taille supérieure à 0 (et ne peut être constituée uniquement de caractères vides).

  • Si la propriété Phone (numéro de téléphone) a une valeur (une taille supérieure à 0 donc), alors cette propriété doit être validée par une expression régulière.

  • Si la propriété Email a une valuer, alors cette propriété doit également être validée par une expression régulière.

Lorsqu’il y a une violation de l’une des règles de validation, un message d’erreur est alors ajouté à l’objet ModelState à l’aide de la method AddModelError(). Lorsque vous ajoutez un message à l’objet ModelState, vous devez fournir le nom d’une propriété ainsi qu’un texte contenant votre message d’erreur. Ce message est alors affiché dans la vue via les 2 méthodes Html.ValidationSummary() et Html.ValidationMessage() présentées précédemment.

Après que les règles de validation soient exécutées, la propriété IsValid de l’objet ModelState est vérifiée. La valeur booléenne est positionnée à faux lorsque la moindre erreur de validation fut ajoutée à l’objet ModelState. Ainsi, si la validation a échouée, le formulaire de création est affiché à nouveau avec les messages d’erreur correspondant.

Les expressions régulières pour valider le numéro de téléphone et les adresses emails viennent de la bibliothèque suivante: http://regexlib.com

Ajout d’une logique de validation dans l’action d’édition


L’action d’édition met à jour un contact. L’action Edit() a besoin d’effectuer exactement la même validation que l’action Create(). Plutôt que de dupliquer le même code de validation, mieux vaut factoriser cette partie de code de manière à ce que chacune des 2 actions Create() et Edit() appelle la même méthode de validation.

La classe du contrôleur Contact modifiée se trouve dans le Listing 3. Cette classe dispose d’une nouvelle méthode nommée ValidateContact() appelée au sein de chacune des 2 actions.

Listing 3 – Controllers\ContactController.cs

using System.Linq;

using System.Text.RegularExpressions;

using System.Web.Mvc;

using ContactManager.Models;
namespace ContactManager.Controllers

{

public class ContactController : Controller

{

private ContactManagerDBEntities _entities = new ContactManagerDBEntities();
protected void ValidateContact(Contact contactToValidate)

{

if (contactToValidate.FirstName.Trim().Length == 0)

ModelState.AddModelError("FirstName", "First name is required.");

if (contactToValidate.LastName.Trim().Length == 0)

ModelState.AddModelError("LastName", "Last name is required.");

if (contactToValidate.Phone.Length > 0 && !Regex.IsMatch(contactToValidate.Phone, @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"))

ModelState.AddModelError("Phone", "Invalid phone number.");

if (contactToValidate.Email.Length > 0 && !Regex.IsMatch(contactToValidate.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"))

ModelState.AddModelError("Email", "Invalid email address.");

}
public ActionResult Index()

{

return View(_entities.ContactSet.ToList());

}
public ActionResult Create()

{

return View();

}
[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Create([Bind(Exclude = "Id")] Contact contactToCreate)

{

// Validation logic

ValidateContact(contactToCreate);

if (!ModelState.IsValid)

return View();
// Database logic

try

{

_entities.AddToContactSet(contactToCreate);

_entities.SaveChanges();

return RedirectToAction("Index");

}

catch

{

return View();

}

}
public ActionResult Edit(int id)

{

var contactToEdit = (from c in _entities.ContactSet

where c.Id == id

select c).FirstOrDefault();
return View(contactToEdit);

}
[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Edit(Contact contactToEdit)

{

ValidateContact(contactToEdit);

if (!ModelState.IsValid)

return View();
try

{

var originalContact = (from c in _entities.ContactSet

where c.Id == contactToEdit.Id

select c).FirstOrDefault();

_entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit);

_entities.SaveChanges();

return RedirectToAction("Index");

}

catch

{

return View();

}

}
public ActionResult Delete(int id)

{

var contactToDelete = (from c in _entities.ContactSet

where c.Id == id

select c).FirstOrDefault();
return View(contactToDelete);

}
[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Delete(Contact contactToDelete)

{

try

{

var originalContact = (from c in _entities.ContactSet

where c.Id == contactToDelete.Id

select c).FirstOrDefault();
_entities.DeleteObject(originalContact);

_entities.SaveChanges();

return RedirectToAction("Index");

}

catch

{

return View();

}

}
}

}

Résumé


Dans cette étape, nous avons ajouté une forme basique de validation de formulaires à notre application de gestion de contacts. Notre logique de validation permet d’éviter aux utilisateurs de soumettre de nouveaux contacts ou d’éditer des contacts existant sans préciser de valeur aux propriétés prénom et nom. De plus, l’utilisateur doit obligatoirement soumettre des numéros de téléphone et adresse email un tant soit peu valides.

Nous avons ajouté cette logique de validation de la manière la plus simple qui soit. Cependant, mélanger une logique de validation avec la logique même du contrôleur pourra créer des problèmes de maintenance à long terme.

Dans la prochaine étape, nous allons revoir l’architecture de notre logique de validation et de notre logique d’accès aux données pour les sortir de nos contrôleurs. Nous allons ainsi bénéficier de plusieurs principes d’architecture logicielle pour créer une application plus facile à maintenir et plus découpée.

Développer une application de gestion de contacts avec ASP.NET MVC (C#)


Lire et télécharger les tutoriels : http://msdn.microsoft.com/fr-fr/asp.net/dd627541.aspx

Bas du formulaire

similaire:

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconDéveloppement d’une application de gestion de contacts avec asp. Net mvc (C#)

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconArchitecte Analyste Programmeur. Net 5, 0 C#, asp. Net, vb. Net java/J2EE

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconJava 2ee (Jsp Servlet Ejb jpa/Hibernate Spring Jsf “Seam : notions”...

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconA. introduction à asp. Net

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconLa nouvelle application devolo Home Control est maintenant disponible...
«responsive design» et bénéficie d’une architecture complètement revisitée. De cette façon, les utilisateurs ios et Android ont une...

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconLa nouvelle application devolo Home Control est maintenant disponible...
«responsive design» et bénéficie d’une architecture complètement revisitée. De cette façon, les utilisateurs ios et Android ont une...

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconI déploiement d’application Windows avec Visual Studio. Net
...

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconApplication Web «gsb-appliFrais mvc»

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconA gence net design
«Internet apporte un ‘plus’ à toutes les entreprises et le secteur de l’industrie représente un important potentiel de développement...

Développement d’une application de gestion de contacts avec asp. Net mvc (C#) iconIngénieur Etudes & Développement Senior Dot Net / Architecte technique Dot Net








Tous droits réservés. Copyright © 2016
contacts
ar.21-bal.com