簡體   English   中英

jQuery datepicker中的日期模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM