![](/img/trans.png)
[英]saving datetime with format yyyy/MM/dd HH:mm:ss cause validation error in asp.net mvc
[英]Annotation Validation in Asp.net MVC just accept MM/dd/yyyy format
我已經花了幾個小時閱讀很多文章,但是仍然無法解決我的問題。
我的模型中有一個DateTime
類型的屬性:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public System.DateTime StartTime { get; set; }
我已將格式設置為dd/MM/yyyy
,因此我希望接受2014年12 dd/MM/yyyy
日這樣的日期。 但是,驗證始終失敗,並顯示以下消息: The field StartTime must be a date.
我嘗試輸入2014年12月14日,可以。
在閱讀了幾篇文章之后,我嘗試用剃刀代碼編輯格式,例如:
@Html.TextBoxFor(model => model.StartTime, "{0:dd/MM/yyyy}")
並嘗試使用EditorFor,例如ataravati在以下答案中所述:
@Html.EditorFor(model => model.StartTime)
或者,將web.config
中的區域性更改為GB之前一個月之前的區域性:
<system.web>
<globalization uiCulture="en" culture="en-GB"/>
</system.web>
但是,他們都不適合我。
我嘗試僅使用文本輸入並手動輸入日期(而不使用jqueryUI之類的任何控件)。 但是,如果驗證格式為dd / MM / yyyy,則仍然不能接受我的手動輸入。 誰能向我展示問題或向我展示解決問題的方法?
更新:對於可能與我有相同問題的人。
在斯蒂芬下面提到的帖子之后,我們必須創建一個“日期”驗證來覆蓋注釋驗證的默認值。 我們創建的自定義驗證將允許我們需要的格式。
但是,此后,發布到控制器的數據可能不包含該數據(在我的情況下,所有datetime值都設置為默認datetime)。 原因是區域性設置不接受您的格式。 我們可以在web.config中更改區域性設置,但我認為這不是最好的方法,因為它會影響項目中的其他值類型(貨幣,數字...)。 以我的方式,我創建了一個自定義ModelBinder以正確的格式綁定Datetime(此處的示例: http : //www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder )。
上面的解決方案看起來很復雜。 通過驗證不應該只是這樣,但到目前為止,我還沒有發現更好的方法。 因此,如果有人擁有更好的解決方案,可以讓注釋驗證正確地驗證格式的datetime值,請共享它。
僅當您使用@Html.EditorFor
而不是@Html.TextBoxFor
時, ApplyFormatInEditMode
選項才有效。 將您的剃刀代碼更改為此:
@Html.EditorFor(model => model.StartTime)
實際上,對我來說可以挽救生命的一件事如下,並且您不需要任何數據注釋(除非您想要它們,等等):
@Html.TextBoxFor(m => m.StartDate, new { @Value = Model.StartDate.ToString("dd-MMM-yyyy") })
上述格式當然可以更改為任何格式。
當然,一個流行的事情就是添加一個日期選擇器。 我正在使用jQuery UI datepicker以便於使用:
@Html.TextBoxFor(model => model.StartDate, new { @Value = Model.StartDate.ToString("dd-MMM-yyyy"), @class = "form-control datepicker" })
為了完整起見,我的視圖模型類示例如下所示:
[DisplayName("Start Date")]
[Required(ErrorMessage = "An start date must be supplied")]
public DateTime StartDate { get; set; }
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.