Validation sur Viewmodel dans ASP.NET MVC
La plupart des conseils sur la façon de mettre en œuvre la validation dans ASP.NET MVC semblent se centrer autour du Modèle (soit en construisant des couches de service entre le modèle et le contrôleur ou la décoration de propriétés du modèle avec les attributs de validation).
Dans mon application j'utilise Viewmodel pour toutes les communications entre les contrôleurs et les vues.
J'ai un ViewModel pour ma page de connexion appelé "LoginViewModel" avec une propriété appelée 'e-mail'.
Lorsque l'utilisateur entre son adresse email et de cliquer sur envoyer, ce Dernier est rempli et envoyé au contrôleur, où l'adresse e-mail est validé.
Il doit être une adresse email valide, et l'utilisateur doit être à partir d'un domaine qui est enregistré avec le système.
Ce serait une bonne façon d'ajouter de la validation de cette? Dois-je mettre de la validation dans le ViewModel lui-même? Ou faut-il rester dans le contrôleur?
Vous devez vous connecter pour publier un commentaire.
"Dois-je mettre de la validation dans le ViewModel lui-même? Ou faut-il rester dans le contrôleur" je suis d'accord avec Robert, mais je voudrais ajouter un plug pour plus d'automatisation.
Si vous regardez d'un outil tel que xVal, vous pouvez voir que la routine de validation (par exemple, les champs requis, les numéros dans les fourchettes, les chaînes de correspondance des expressions régulières) peut être fait automatiquement par la décoration de champs de vos classes de données. En fait, xVal peut écrire automatiquement le JavaScript pour la routine de validations de sorte qu'il est exécuté côté client. Le tout sans écrire de code. Plus profondément, les validations (par exemple, cet utilisateur est-il membre d'un nom de domaine enregistré dans notre base de données?) arriver côté serveur à l'intérieur de la couche du modèle lui-même.
À l'aide de ce Dernier idiome peut poser certains défis à ce régime. Ma démarche actuelle est d'intégrer mes objets de l'entité à l'intérieur de mon modèle de vue, par exemple,
et puis dans le contrôleur, peu profonde, la validation se produit lorsque la mise à jour du modèle:
et les validations exigeant plus d'information ou plus de calculs compliqués produire à l'intérieur de la couche du modèle lui-même.
Une autre approche est de ne pas intégrer l'entité objet, mais seulement la carte des champs individuels entre les deux. J'ai récemment pris conscience d'un outil appelé AutoMapper qui relie automatiquement les champs entre le domaine et le modèle d'affichage des objets. Il ressemble à l'appui de cette méthode de validation, bien que je n'ai pas encore utilisé.
La NerdDinner tutoriels montrer la validation comme se produisant dans vos classes partielles du modèle (c'est à dire de Linq to SQL ou Entity Framework). Mais puisque vous êtes à l'aide de Modèles de Vue, vous pouvez mettre de la validation de la logique là-dedans.
La Logique de Validation n'est pas aller dans le contrôleur. Plutôt, il est accroché par le contrôleur avec une vérification de la propriété, c'est à dire ModelState.IsValid
Tous les détails sont ici:
De la construction du Modèle
http://nerddinnerbook.s3.amazonaws.com/Part3.htm
et ici:
ViewData et ViewModel
http://nerddinnerbook.s3.amazonaws.com/Part6.htm