2010-06-22 11 views
18

me preguntaba si hay una forma de usar la anotación de datos de ASP.Net sin el sitio MVC.Usando ASP.Net MVC Anotación de datos fuera de MVC

Mi ejemplo es que tengo una clase que una vez creada necesita ser validada, o lanzará un error. Me gusta el método de anotación de datos, en lugar de un montón de bloques activados por el iniciador.

¿Hay alguna manera de hacer que esto funcione?

pensé que sería algo así como:

  • anotaciones añadir datos
  • disparar un método en el que llama a la initialiser validador MVC en la clase

alguna idea? Debo admitir que no he añadido el marco MVC para mi proyecto como esperaba yo sólo podía usar el System.ComponentModel.DataValidation clase de anotaciones de datos

+0

Creé mi propia versión de la clase DataValidation, posiblemente pueda subcontratarla si a la gente le interesa. Fue hecho antes de MVC2, y puede acomodar casos más complejos. –

Respuesta

26

He aquí un ejemplo:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

public class Foo 
{ 
    [Required(ErrorMessage = "the Bar is absolutely required :-)")] 
    public string Bar { get; set; } 
} 

class Program 
{ 
    public static void Main() 
    { 
     var foo = new Foo(); 
     var results = new List<ValidationResult>(); 
     var context = new ValidationContext(foo, null, null); 
     if (!Validator.TryValidateObject(foo, context, results)) 
     { 
      foreach (var error in results) 
      { 
       Console.WriteLine(error.ErrorMessage); 
      } 
     } 
    } 
} 

Pero honestamente FluentValidation es mucho mas poderoso.

+3

Estaba buscando una solución .Net 3.5 - ValidationContext no está disponible antes de .Net 4.0 – Doug

+1

@Doug podría querer poner eso como una pregunta en la pregunta. –

+0

Desafortunadamente, esta validación no se repite a través de ningún objeto secundario o colección compleja. El Validator.TryValidateObject (...) solo hace validaciones de propiedad y campo inmediatas, y lo llama un día, en oposición a la validación que ocurre en el enlace del modelo en el controlador en el mundo MVC que atraviesa todo el gráfico del objeto. – neumann1990

Cuestiones relacionadas