[英]Date model in jQuery datepicker
我需要使用datepicker在SQL-Server DB中存儲日期格式“29-12-2014”,但我收到消息字段XXX必須是日期。
我的最后一次嘗試是正則表達:
型號#1:
[RegularExpression(@"([3][0,1]|[0-2]\d)-([1][0-2]|[0]\d)-(\d\d\d\d)", ErrorMessage = "Valor inválido.")]
public Nullable<DateTime> ETD { get; set; }
型號#2:
[DataType(DataType.DateTime)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
public Nullable<DateTime> ETD { get; set; }
視圖:
<div class="editor-field">
@Html.TextBoxFor(model => model.ETD)
@Html.ValidationMessageFor(model => model.ETD)
</div>
jQuery的:
$(function () {
$("#ETD").datepicker();
});
我總是收到消息“字段ETD必須是約會”。
任何的想法?
謝謝。
據我所知,格式'dd-MM-yyyy'就是問題所在。 jquery不顯眼的驗證試圖實例化一個新的Date(strVal)對象,它不知道如何處理字符串'29 -12-2014'。
請參閱Chrome中的不顯眼驗證,不會使用dd / mm / yyyy進行驗證
magritte回答說,使用jQuery Globalize庫重新定義不顯眼的驗證器的日期方法,用所需的格式字符串進行解析應解決問題:
$.validator.methods.date = function (value, element) {
return this.optional(element) || Globalize.parseDate(value, "dd-MM-yyyy", "en");
}
更新
我在本地重新創建了您的問題,並且能夠在未安裝Globalization庫時復制“在表單發布之前未觸發的必需字段驗證”。 安裝並加載庫后,前端按預期工作,不顯眼的驗證接受修改后的dd-MM-yyyy日期。
可以使用NuGet包管理器和以下包安裝該庫: http : //www.nuget.org/packages/jquery-globalize/ 。 然后,您需要更新您的html以包含globalize.js腳本。
后端是另一個故事,它將依賴於您本地機器的全球化配置文件。 我假設您運行的是非en / us機器,此格式可能會解析? 我的機器是英語/我們並沒有原生解析修改后的日期格式,但是使用下面的命令,我成功獲得了一個有效的日期時間:
DateTime.ParseExact(Request.Form["ETD"], "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
這應該可以在框中設置您的格式:
$("#ETD").datepicker({
dateFormat : 'dd-mm-yy'
});
驗證消息是來自jQuery還是C#? 請參閱前者的答案: https : //stackoverflow.com/a/19519745/1803682
在@DanS的幫助下,我能夠為我的國家葡萄牙(pt-PT)制定日期驗證的解決方案,對於任何驗證日期有問題的人來說,這是完整的解決方案:
首先,您需要安裝nuget包:
http://www.nuget.org/packages/jquery-globalize/
然后在您要進行驗證的頁面中(或像我這樣的Bundle中)包含指向核心庫和您所在國家/地區的文化文件的鏈接(注意:首先放置核心,然后是文化文件,否則您將得到一個未定義的錯誤)
bundles.Add(new ScriptBundle("~/bundles/saida").Include(
"~/Scripts/Presenter/Saida/create.js",
"~/Scripts/Globalize/globalize.js",
"~/Scripts/Globalize/Cultures/globalize.culture.pt-PT.js",
"~/Scripts/Common/date.js"));
設置模型:
[Required(ErrorMessage = "Preenchimento obrigatório.")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
[Display(Name = "Data da DAU")]
public DateTime? DAUData { get; set; }
我沒有在DataType屬性中放置任何ErrorMessage,因為它沒有傳遞給View,而是可以在View中放置自定義消息:
<div class="editor-field">
@Html.EditorFor(model => model.DAUData)
@Html.ValidationMessageFor(model => model.DAUData, "Formato de data inválido.")
</div>
但是如果你使用jQuery datepicker函數和格式的定義,你不必擔心格式:
$(function ()
{
$(".datefield").datepicker({ dateFormat: 'dd-mm-yy', changeYear: true });
});
屬性changeYear是提交一個下拉列表來選擇年份(不是強制性的,只是保證值始終有效的一個很好的選項),並且不要忘記在文件中包含jQuery和jQueryUI引用以正確地呈現日歷。
要完成客戶端腳本,我有文化的格式驗證:
$.validator.methods.date = function (value, element)
{
return this.optional(element) || Globalize.parseDate(value, "dd-MM-yyyy", "pt-PT");
}
我還在View中有一個日期格式的模板(將它放在Shared / EditorTemplates /文件夾中,不要忘記在View中使用@ Html.EditorFor razor方法:
@{
var value = "";
if (Model.HasValue)
{
value = String.Format("{0:d}", Model.Value.ToString("dd-MM-yyyy"));
}
}
@Html.TextBox("", value, new { @class = "datefield", type = "text", autocomplete = "off" })
現在,只要你需要一個日期,就可以使用模板和類“datepicker”,就是這樣!
再次感謝DanS;)
你看過這個鏈接了嗎? 我相信他們有類似的問題: 字段日期必須是以mvc為單位的日期
還有這個: Jquery Datepicker Chrome
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.