Validation Validation Regex Matherex Validatex
-
02-10-2019 - |
Вопрос
У меня следуя недвижимость в моем модели Metadata:
[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; }
Но всякий раз, когда я звоню ModelState.IsValid
Это всегда возвращает false, потому что Regex не проверяет. Я соответствовал введенной дате (29/29/2010) против нового Regex, используя тот же шаблон, и он совсем совпадает.
Что я делаю неправильно?
Решение
Это потому, что регулярное выражение относится к струнам, а не DateTime
характеристики. Если пользователь вводит неверную строку, которая не может быть проанализирована на DateTime
Экземпляр из моделей Binder он добавит универсальное сообщение об ошибке перед выполнением шаблона Regex.
У вас есть пара возможностей:
- Настройте сообщение об ошибке В файле ресурсов
- Написать пользовательскую модель Binder
- Используйте свойство строки (я чувствую себя виноватым для того, чтобы предложить это :-))
Другие советы
Фактически есть еще один обходной путь для этого. Вы можете просто подкласснуть regularexpressattribute
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;
}
}
В вашем Global.Asax.cs at Application Начните регистрировать regularexpression ADDAPTER для проверки на стороне клиента, как так:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(DateFormatValidatorAttribute),
typeof(RegularExpressionAttributeAdapter));
Теперь вы получаете систему Carlatiator навязывающую квалификатор MVC Validator и сохраните DateTime в качестве типа своего свойства