2010-01-21 3 views
12

J'ai récemment utilisé ASP.Net MVC avec DataAnnotations et je pensais utiliser la même approche pour un projet Forms, mais je ne suis pas sûr de la procédure à suivre.Utilisation de DataAnnotations sur un projet Windows Forms

J'ai défini mes attributs mais ils ne semblent pas être vérifiés lorsque je clique sur Enregistrer.

MISE À JOUR: Je l'ai utilisé Steve Sanderson's approach qui vérifiera les attributs sur ma classe et retourner une collection d'erreurs comme ceci:

 try 
     { 
      Business b = new Business(); 
      b.Name = "feds"; 
      b.Description = "DFdsS"; 
      b.CategoryID = 1; 
      b.CountryID = 2; 
      b.EMail = "SSDF"; 
      var errors = DataAnnotationsValidationRunner.GetErrors(b); 
      if (errors.Any()) 
       throw new RulesException(errors); 

      b.Save(); 
     } 
     catch(Exception ex) 
     { 

     } 

Que pensez-vous de cette approche?

Répondre

6

L'exemple de Steve est un peu daté (bien que toujours bon). Le DataAnnotationsValidationRunner dont il dispose peut maintenant être remplacé par la classe System.ComponentModel.DataAnnotations.Validator. Il possède des méthodes statiques pour valider les propriétés et les objets qui ont été décorés avec des attributs DataAnnotations.

+3

Il n'y a pas une tonne d'exemples d'utilisation de cette classe 'Validator' en dehors de MVC, donc vous voudrez probablement l'appeler en utilisant quelque chose comme ceci:' var results = new List (); var success = Validator.TryValidateObject (chose, nouveau ValidationContext (chose, null, null), résultats); ' –

+0

Notez également que si vous utilisez' [Range] 'vous devrez ajouter' true' après 'results' dans la méthode 'TryValidateObject'. – Stephen

18

Voici un exemple simple. supposons que vous avez un objet comme les suivantes

using System.ComponentModel.DataAnnotations; 

public class Contact 
{ 
    [Required(AllowEmptyStrings = false, ErrorMessage = "First name is required")] 
    [StringLength(20, MinimumLength = 5, ErrorMessage = "First name must be between 5 and 20 characters")] 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    [DataType(DataType.DateTime)] 
    public DateTime Birthday { get; set; } 
} 

Et supposons que nous avons une méthode qui crée une instance de cette classe et tente de valider ses propriétés, comme indiqué ci-dessous

private void DoSomething() 
    { 
     Contact contact = new Contact { FirstName = "Armin", LastName = "Zia", Birthday = new DateTime(1988, 04, 20) }; 

     ValidationContext context = new ValidationContext(contact, null, null); 
     IList<ValidationResult> errors = new List<ValidationResult>(); 

     if (!Validator.TryValidateObject(contact, context, errors,true)) 
     { 
      foreach (ValidationResult result in errors) 
       MessageBox.Show(result.ErrorMessage); 
     } 
     else 
      MessageBox.Show("Validated"); 
    } 

L'espace de noms DataAnnotations est pas lié à la structure MVC afin que vous puissiez l'utiliser dans différents types d'applications. l'extrait de code ci-dessus renvoie true, essayez de mettre à jour les valeurs de propriété pour obtenir des erreurs de validation.

Et assurez-vous de la caisse de la référence sur MSDN: DataAnnotations Namespace

0

Si vous utilisez les dernières versions de Entity Framework vous pouvez utiliser cette cmd pour obtenir une liste de vos erreurs si existant:

YourDbContext.Entity(YourEntity).GetValidationResult();