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?

¿Fue útil?

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:

  1. Personalizar el mensaje error en un archivo de recursos
  2. Escribir un ligante modelo personalizado
  3. 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top