ASP.Net MVC 2 Validación del Modelo Regex validador falla
-
02-10-2019 - |
Pregunta
He propiedad siguiente en mi clase de modelo de metadatos:
[Required(ErrorMessage = "Spent On is required")]
[RegularExpression(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]",
ErrorMessage = "Please enter date in mm/dd/yyyy format")]
[DataType(DataType.Date)]
[DisplayName("Spent On")]
public DateTime SpentOn { get; set; }
Pero cada vez que llamo ModelState.IsValid
siempre devuelve falso, porque no es la validación de expresiones regulares. He adaptado la fecha introducida (08/29/2010) contra la nueva expresión regular usando mismo patrón y que coincide perfectamente.
¿Qué estoy haciendo mal?
Solución
Esto se debe a la expresión regular se aplica a las cadenas y no DateTime
propiedades. Si el usuario introduce una cadena no válida, que no se puede analizar a una instancia DateTime
a partir del modelo de aglutinante que se sumará un mensaje de error genérico antes de que sus ejecuta patrón de expresión.
Usted tiene un par de posibilidades:
- Personalizar el mensaje error en un archivo de recursos
- Escribir un ligante modelo personalizado
- Usar una propiedad de cadena (me siento culpable por proponer esta: -))
Otros consejos
actualy hay otra solución para esto. Simplemente puede subclase el RegularExpressionAttribute
public class DateFormatValidatorAttribute : RegularExpressionAttribute {
public DateFormatValidatorAttribute()
: base(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]")
{
ErrorMessage = "Please enter date in mm/dd/yyyy format";
}
public override bool IsValid(object value) {
return true;
}
}
en sus Global.asax.cs al iniciar la aplicación registrar el addapter RegularExpression para la validación del lado del cliente, así:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(DateFormatValidatorAttribute),
typeof(RegularExpressionAttributeAdapter));
Ahora se llega a tener la acumulación en el lado del cliente validador exression regular de MVC y mantener la fecha y hora como el tipo de propiedad