我正在使用不引人注意的客户端验证。
我有一个带有以下数据注释的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解析和服务器端是否存在差异?看起来有点儿马车?!
由于
答案 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对象。