2011-06-27 18 views
20

Uso anotaciones de datos en mi proyecto ASP.NET MVC 3 para validar el modelo. Estos son extremadamente convenientes, pero actualmente son mágicos para mí. Leí que las anotaciones de datos hacen no arrojan excepciones. Entonces, ¿cómo sabe MVC agregar errores de validación al diccionario de estado modelo? ¿Cómo funciona la falla al establecer una propiedad en el modelo debido a la validación del modelo hasta MVC si no se lanza ninguna excepción? Siempre asumí que se producían excepciones cada vez que una propiedad fallaba y que el enlace del modelo MVC detectaba la excepción y la agregaba al diccionario de estado modelo.¿Cómo funcionan las anotaciones de datos?

Para probar esto he creado una aplicación de consola y añadió una clase de muestra con una anotación de validación a la misma:

public class MyObject 
{ 
    [StringLength(10, MinimumLength=3)] 
    public string Name { get; set; } 
} 

entonces instancia del objeto y trató de asignar valores a la propiedad Name que tenían menos de 3 . La propiedad asignada muy bien, a pesar de la anotación que dice que la longitud de cadena de menos de 3 no está permitida.

static void Main(string[] args) 
    { 
     MyObject mine = new MyObject(); 
     mine.Name = "hi"; 
     Console.WriteLine(mine.Name); 
     Console.ReadLine(); 
    } 

Este pequeño programa escribe "hola" en la consola. ¿Por qué? Esperaba que se enfadara al intentar establecer mine.Name en "hola".

¿Qué me estoy perdiendo?

Gracias de antemano.

Respuesta

15

Nunca se llama nada para validar las propiedades. La validación no sucede mágicamente por sí misma. de http://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx

manualmente validar los valores

Cuando no se utiliza el control DataGrid para proporcionar la interfaz para edición de datos, los atributos de validación no son automáticamente aplicado. Sin embargo, puede manualmente aplicar la prueba de validación utilizando la clase Validator.Puede llamar al método ValidateProperty en el acceso del conjunto de una propiedad para comprobar el valor con los atributos de validación de la propiedad. Debe también ajustar ambas ValidatesOnExceptions y NotifyOnValidationError propiedades a cierto cuando el enlace de datos para recibir excepciones de validación de validación atributos. Para obtener un ejemplo de validación de manualmente, consulte el Ejemplo de enlace de datos a continuación.

+0

Si hago 'mine.Name'. No veo un método llamado' ValidateProperty'. – Chev

+5

no está en mine.name. Probablemente debería leer "Llamar al método' Validate.ValidateProperty' desde * dentro * del conjunto de accesos de una propiedad ... ' –

+0

Ohhhh, tengo. Ty ty – Chev

3

C# proporciona un mecanismo para definir etiquetas declarativas, llamados atributos, que se pueden colocar en ciertas entidades en el código fuente para especificar información adicional. La información que los atributos contienen puede recuperarse en tiempo de ejecución mediante reflexión.

https://msdn.microsoft.com/en-us/library/aa288059(v=vs.71).aspx

Éstos son tres artículos para ayudar a expandir su conocimiento de cómo los atributos de trabajo. El último es el menos importante si comprende cómo usarlos. El artículo es para Silverlight pero sigue siendo aplicable al tema en cuestión.

Introduction to Attributes

Attributes

DataTypeAttributes

Using Data Annotations w/ silverlight

3

Entonces, ¿cómo sabe MVC añadir errores de validación al diccionario modelo de estado ?

ModelValidatorProvider, más específicamente, DataAnnotationsModelValidatorProvider. Esto es llamado por MVC.

+0

¿Se hace en back-end o en front-end? Supongo que es automáticamente creo REST API vor Validación o algo así, porque no puedo ver nada así en el front end. – TIKSN

0

porque no está comprobando si el modelo es válido ... la notación de datos comprueba la validez del modelo. entonces obtendrás tu error.

+0

La única razón por la que no estoy verificando si el modelo es válido es porque es 2017 y ni siquiera recuerdo esto código ahora XD – Chev

Cuestiones relacionadas