2010-01-21 21 views
12

Recientemente utilicé ASP.Net MVC con DataAnnotations y estaba pensando en utilizar el mismo enfoque para un proyecto de Formularios, pero no estoy seguro de cómo hacerlo.Uso de DataAnnotations en el proyecto de Windows Forms

He establecido mis atributos pero no parecen comprobarse cuando hago clic en Guardar.

ACTUALIZACIÓN: he utilizado Steve Sanderson's approach que comprobar si los atributos en mi clase y devolver una colección de errores de este modo:

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

     } 

¿Qué opinas de este enfoque?

Respuesta

6

El ejemplo de Steve es un poco anticuado (aunque sigue siendo bueno). El DataAnnotationsValidationRunner que tiene puede ser reemplazado por la clase System.ComponentModel.DataAnnotations.Validator ahora, tiene métodos estáticos para validar propiedades y objetos que han sido decorados con atributos DataAnnotations.

+3

No hay un montón de ejemplos del uso de esta clase 'Validator' fuera de MVC, por lo que probablemente desee llamarlo usando algo como esto:' var results = new List (); var success = Validator.TryValidateObject (cosa, nuevo ValidationContext (cosa, nulo, nulo), resultados); ' –

+0

También tenga en cuenta que si usa' [Range] 'tendrá que agregar' true' after' results' en el método 'TryValidateObject'. – Stephen

18

Aquí hay un ejemplo simple. supongamos que tiene un objeto como el siguiente

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

Y supongamos que tenemos un método que crea una instancia de esta clase y trata de validar sus propiedades, tal como se indica a continuación

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

El espacio de nombres DataAnnotations no es vinculado al marco de MVC para que pueda usarlo en diferentes tipos de aplicaciones. el fragmento de código anterior devuelve verdadero, intente actualizar los valores de la propiedad para obtener errores de validación.

Y asegúrese de pago y envío la referencia en MSDN: DataAnnotations Namespace

0

Si utiliza versiones más recientes de Marco de la entidad puede utilizar esta cmd para obtener una lista de sus errores si existente:

YourDbContext.Entity(YourEntity).GetValidationResult(); 
Cuestiones relacionadas