Вопрос

У меня следуя недвижимость в моем модели 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.

У вас есть пара возможностей:

  1. Настройте сообщение об ошибке В файле ресурсов
  2. Написать пользовательскую модель Binder
  3. Используйте свойство строки (я чувствую себя виноватым для того, чтобы предложить это :-))

Другие советы

Фактически есть еще один обходной путь для этого. Вы можете просто подкласснуть 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 в качестве типа своего свойства

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top