0

我正在使用不顯眼的客戶端驗證。MVC RegularExpression註解不同的結果客戶端 - 服務器

我有以下數據註解

[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]$",... 

它仍然不會接受它的服務器上。這些更改與客戶端驗證一樣符合預期。

與客戶端的regularexpression解析和服務器端有區別嗎?這似乎有點兒車?!

感謝

回答

0

我認爲問題是由您的視圖模型使用DateTime對象引起的。模型綁定器不能僅從輸入時間創建日期時間對象。我通常只使用一個字符串中的視圖模型:

[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中是有效的,解析字符串的日期時間對象。

+0

嗯 - 模型綁定者實際上給了我一個DateTime和正確的時間。其日期部分設置爲今天。此外,它沒有解釋爲什麼`^。*:[0-5] [0-9] $`有效,但是^ [0-2] [0-9]:[0-5] [0-9 ] $`不是。這就是說 - 我用你的解決方法,它工作正常。我希望看到在接受你的之前是否有其他答案出現。 – CracyD 2011-08-17 13:36:15