MVC RegularExpression аннотация другой результат клиент - сервер - PullRequest
0 голосов
/ 17 августа 2011

Я использую ненавязчивую проверку на стороне клиента.

У меня есть ViewModel со следующими аннотациями данных

[DisplayName("Entrytime")]
[DataType("Time")]
[RegularExpression(@"^(?[0-1]?[0-9]|[2][0-3]):[0-5][0-9]$", ErrorMessageResourceType = typeof(LocalizedResources), ErrorMessageResourceName = "Time")]
public DateTime? EntryTime { get; set; }

Проблема в том, что проверка на стороне клиента работает нормально, что позволяет мне вводить например 12:20 в мое поле, а не 25: 20.

Но на сервере, если я спрашиваю ModelState.IsValid, я получаю сообщение об ошибке на поле.

Кажется, проблема находится перед двоеточием в моем регулярном выражении. Если я изменю выражение на

[RegularExpression(@"^.*:[0-5][0-9]$",...

Работает нормально.

Но если у меня есть

[RegularExpression(@"^[0-2][0-9]:[0-5][0-9]$",...

Он все равно не примет это на сервере. Изменения работают, как и ожидалось, при проверке на стороне клиента.

Есть ли разница с анализом регулярных выражений на стороне клиента и на стороне сервера? Кажется, немного глючит?!

Спасибо

1 Ответ

0 голосов
/ 17 августа 2011

Я думаю, что проблема вызвана использованием объекта datetime в вашей viewmodel. Моделиндер не может создать объект datetime только из ввода времени. Я обычно просто использую строку в viewmodel:

[DisplayName("Entrytime")]
[DataType("Time")]
[RegularExpression(@"^(?[0-1]?[0-9]|[2][0-3]):[0-5][0-9]$", ErrorMessageResourceType = typeof(LocalizedResources), ErrorMessageResourceName = "Time")]
public string EntryTime { get; set; }

Если состояние модели допустимо, проанализируйте строку в объекте datetime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...