I have following property in my Model Metadata class:
[Required(ErrorMessage = \"Spent On is required\")]
[RegularExpression(@\"[0-1][0-9]/[0-3][0-9]/20[12][
That's because regex applies to strings and not DateTime
properties. If the user enters an invalid string which cannot be parsed to a DateTime
instance from the model binder it will add a generic error message before your regex pattern executes.
You have a couple of possibilities:
Actualy there is another workaround for this. You can simply subclass the 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;
}
}
in your Global.asax.cs on application start register the RegularExpression addapter for client side validation like so:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(DateFormatValidatorAttribute),
typeof(RegularExpressionAttributeAdapter));
Now you get to have the build-in MVC regular exression validator client side and keep the DateTime as your property type