ASP.Net MVC 2 Model Validation Regex Validator fails

前端 未结 2 1234
暗喜
暗喜 2020-12-21 16:03

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][         


        
相关标签:
2条回答
  • 2020-12-21 16:49

    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:

    1. Customize the error message in a resource file
    2. Write a custom model binder
    3. Use a string property (I feel guilty for proposing this :-))
    0 讨论(0)
  • 2020-12-21 16:50

    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

    0 讨论(0)
提交回复
热议问题