0

我正在使用不显眼的客户端验证。

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

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

客户端正则表达式解析和服务器端有区别吗?好像有点坑?!

谢谢

4

1 回答 1

0

我认为问题是由于在您的视图模型中使用日期时间对象引起的。modelbinder 不能仅从时间输入创建日期时间对象。我通常只在视图模型中使用一个字符串:

[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; }

如果模型状态有效,则将字符串解析为日期时间对象。

于 2011-08-17T13:09:24.050 回答