web-dev-qa-db-fra.com

Appel manuel de la validation ModelState

J'utilise ASP.NET MVC 3 en premier et j'ai ajouté des annotations de données de validation à mes modèles. Voici un exemple de modèle:

public class Product
{
    public int ProductId { get; set; }

    [Required(ErrorMessage = "Please enter a name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required(ErrorMessage = "Please provide a logo")]
    public string Logo { get; set; }
}

Dans mon site Web, j'ai un processus en plusieurs étapes pour créer un nouveau produit - étape 1, vous entrez les détails du produit, étape 2 d'autres informations, etc. Entre chaque étape, je stocke chaque objet (c'est-à-dire un objet produit) dans la session, de sorte que le l'utilisateur peut revenir à cette étape du processus et modifier les données saisies.

Sur chaque écran, la validation côté client fonctionne avec la nouvelle amende de validation jQuery.

La dernière étape est un écran de confirmation après lequel le produit est créé dans la base de données. Cependant, parce que l'utilisateur peut sauter entre les étapes, je dois valider les objets (produit et quelques autres) pour vérifier qu'ils ont correctement rempli les données.

Existe-t-il un moyen d'appeler par programmation la validation ModelState sur un objet comportant des annotations de données? Je ne veux pas avoir à parcourir chaque propriété de l'objet et à faire une validation manuelle.

Je suis ouvert aux suggestions sur la façon d'améliorer ce processus s'il facilite l'utilisation des fonctionnalités de validation de modèle d'ASP.NET MVC 3.

57
Sam Huggill

Vous pouvez appeler la méthode ValidateModel dans une action Controller ( documentation ici ).

73
Steve

Vous pouvez utiliser ValidateModel ou TryValidateModel dans la portée du contrôleur.

Lorsqu'un modèle est en cours de validation, tous les validateurs de toutes les propriétés sont exécutés si au moins une entrée de formulaire est liée à une propriété de modèle. Le ValidateModel est similaire à la méthode TryValidateModel, sauf que la méthode TryValidateModel ne lève pas d'exception InvalidOperationException si la validation du modèle échoue.

ValidateModel - lève une exception si le modèle n'est pas valide.

TryValidateModel - renvoie une valeur booléenne indiquant si le modèle est valide.

Si vous validez une liste de modèles une par une, vous voudrez réinitialiser ModelState pour chaque itération en appelant ModelState.Clear().

Lien vers MSDN

45
Andrei

J'ai trouvé que cela fonctionnait et faisait exactement comme prévu .. montrant le ValidationSummary pour un objet fraîchement récupéré sur une méthode d'action GET ... avant tout POST

Me.TryValidateModel(MyCompany.OrderModel)
2
bkwdesign