2017-02-09 68 views
-2

林triying到validade日期時間字段inobstrusive驗證。如何correctally在MVC不顯眼的驗證驗證日期時間?

如果輸入01/01/2017 10:00然後我得到

領域[fieldId]必須是日期。

但是,該字段不能是日期,而是日期時間。

的參數設置像這樣在我的模型:

[Display(Name = "Start")] 
    [DataType(DataType.DateTime)] 
    public DateTime start { get; set; } 

我無法correctally驗證字段與日期時間輸入。

我該怎麼做?

+0

你所示的代碼將不會** **導致客戶端驗證錯誤的'2017年1月1日10:00的值'(除非你已經做了類似'$ .validator'中的'date'方法的重寫)。如果你得到一個客戶端錯誤,那是因爲你輸入了一個不是有效日期的值。 –

+0

看來似乎是一種文化錯誤,即使我在web.config中設置了正確的文化,客戶端驗證期望的是MM/dd/yyyy日期,而不是文化本地化的日期。 –

+0

在服務器中的文化不影響瀏覽器。默認情況下'jquery.validate.js'驗證MM/dd/yyyy格式的日期。但'01/01/2017 10:00'確實通過'MM/dd/yyyy'或'dd/MM/yyyy')。另一方面,如果你輸入'20/1/2017'(1月20日),那麼它會產生客戶端錯誤。如果是這種情況,你只需要重新配置驗證器。但是這不是你所質疑的狀態,所以如果這是你的經歷,請編輯這個問題,我可以給你一個解決問題的答案。 –

回答

1

請記住,指定DataType沒有做驗證。它所做的只是向瀏覽器提供預期的輸入類型提示。爲了驗證,嘗試添加一個正則表達式驗證,像這樣:

[RegularExpression(@"^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2})) (20|21|22|23|[0-1]?\d):[0-5]?\d$", ErrorMessage = "Date must be in the format of : dd/mm/yyyy hh:mm"] 
[Display(Name = "Start")] 
[DataType(DataType.DateTime)] 
public DateTime start { get; set; }