MVC RegularExpression注释不同的结果客户端 - 服务器

时间:2011-08-17 12:43:18

标签: asp.net-mvc regex asp.net-mvc-3 validation unobtrusive-validation

我正在使用不引人注意的客户端验证。

我有一个带有以下数据注释的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]$",...

它仍然不会在服务器上接受它。通过客户端验证,更改按预期工作。

客户端的regularrexpression解析和服务器端是否存在差异?看起来有点儿马车?!

由于

1 个答案:

答案 0 :(得分:0)

我认为问题是由viewmodel中的datetime对象引起的。 modelbinder无法仅从时间输入创建日期时间对象。我通常只在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; }

如果modelstate有效,则将字符串解析为datetime对象。