2010-01-21 12 views
12

Niedawno użyłem ASP.Net MVC z DataAnnotations i myślałem o użyciu tego samego podejścia do projektu Forms, ale nie jestem pewien, jak go rozwiązać.Korzystanie z DataAnnotations w projekcie Windows Forms

Ustawiłem swoje atrybuty, ale nie wydają się być sprawdzane po kliknięciu Zapisz.

UPDATE: Użyłem Steve Sanderson's approach który sprawdzi atrybuty mojej klasy i powrócić zbiór błędów tak:

 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) 
     { 

     } 

Co sądzicie o takim podejściu?

Odpowiedz

6

Przykład Steve'a jest nieco przestarzały (choć nadal dobry). DataAnnotationsValidationRunner, który ma teraz, można zastąpić klasą System.ComponentModel.DataAnnotations.Validator, ma statyczne metody sprawdzania poprawności właściwości i obiektów, które zostały ozdobione atrybutami DataAnnotations.

+3

Nie ma mnóstwo przykładów użycia tej klasy 'Validator' poza MVC, więc prawdopodobnie chcesz wywołać ją używając czegoś takiego:' var results = new List (); var success = Validator.TryValidateObject (rzecz, nowy tekst ValidationContext (rzecz, null, null), wyniki); ' –

+0

Należy również pamiętać, że jeśli używasz' [Range] 'musisz dodać' true' after 'results' w metodzie "TryValidateObject". – Stephen

18

Oto prosty przykład. załóżmy, że masz obiekt podobny do poniższego

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; } 
} 

I załóżmy, że mamy metodę, która tworzy instancję tej klasy i stara się potwierdzić jego właściwości, jak wymienione poniżej

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"); 
    } 

Przestrzeń nazw DataAnnotations nie jest przywiązany do środowiska MVC, dzięki czemu można go używać w różnych typach aplikacji. powyższy fragment kodu zwraca wartość true, spróbuj zaktualizować wartości właściwości, aby uzyskać błędy sprawdzania poprawności.

I upewnij się do kasy odniesienia na MSDN: DataAnnotations Namespace

0

Jeśli używasz najnowszych wersji Entity Framework można użyć tej cmd, aby uzyskać listę swoich błędów czy istniejący:

YourDbContext.Entity(YourEntity).GetValidationResult(); 
Powiązane problemy