c# - validate - ¿Cómo funcionan las anotaciones de datos?
validate model c# (4)
Uso las 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 no arrojan excepciones. Entonces, ¿cómo sabe MVC agregar errores de validación al diccionario de estado modelo? ¿De qué manera no se establece una propiedad en el modelo debido a la burbuja de validación del modelo hasta MVC si no se produce una excepción? Siempre asumí que se lanzaban excepciones cada vez que fallaba una propiedad y que el enlace del modelo MVC detectaba la excepción y la agregaba al diccionario de estado del modelo.
Para probar esto, creé una aplicación de consola y agregué una clase de muestra con una anotación de validación:
public class MyObject
{
[StringLength(10, MinimumLength=3)]
public string Name { get; set; }
}
Luego instalé el objeto y traté de asignar valores a la propiedad Nombre que eran menores que 3. La propiedad asignada 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" a la consola. ¿Por qué? Esperaba que se enojara al intentar establecer el mine.Name
a "hola".
¿Qué me estoy perdiendo?
Gracias por adelantado.
C # proporciona un mecanismo para definir etiquetas declarativas, llamadas atributos, que puede colocar en ciertas entidades en su código fuente para especificar información adicional. La información que contienen los atributos se puede recuperar en tiempo de ejecución a través de la reflexión.
https://msdn.microsoft.com/en-us/library/aa288059(v=vs.71).aspx
Aquí hay tres artículos para ayudar a ampliar su conocimiento de cómo funcionan los atributos. Lo último es lo menos importante si entiendes cómo usarlos. El artículo es para Silverlight pero todavía es aplicable al tema en cuestión.
http://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx
Entonces, ¿cómo sabe MVC agregar errores de validación al diccionario de estado modelo?
ModelValidatorProvider , más específicamente, DataAnnotationsModelValidatorProvider . Esto es llamado por MVC.
Nunca llamas nada para validar las propiedades. La validación no ocurre mágicamente por sí misma. de http://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx
Validación manual de valores
Cuando no usa el control DataGrid para proporcionar la interfaz para editar datos, los atributos de validación no se aplican automáticamente. Sin embargo, puede aplicar manualmente la prueba de validación utilizando la clase
Validator
. Puede llamar al métodoValidateProperty
en el conjunto de elementos de acceso de una propiedad para comparar el valor con los atributos de validación de la propiedad. También debe establecer las propiedadesValidatesOnExceptions
yNotifyOnValidationError
en true cuando el enlace de datos reciba excepciones de validación de los atributos de validación. Para ver un ejemplo de cómo aplicar la validación manualmente, consulte el Ejemplo de enlace de datos a continuación.
porque no está verificando si el modelo es válido ... la notación de datos verifica la validez del modelo. entonces obtendrá su error.