39

目立たない JavaScript 検証のために ValidationMessageFor コントロールが追加された 2 つの日付フィールドを持つ単純なビューがあります。

私の問題は、日付が正しい形式 (dd/MM/yyyy) であるのに、日付が無効であると言われ続けることです。

<globalization culture="en-GB" uiCulture="en-GB"/>私は自分の web.config に追加し、[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]各 DateTime プロパティにも含めましたが、まだ英国形式の日付を受け入れません。

ここで私が見逃している明らかなものはありますか?

4

5 に答える 5

103

実際には、目立たない日付の JavaScript 検証メソッドをオーバーロードするだけです。

jQuery(function ($) {
    $.validator.addMethod('date',
    function (value, element) {
        if (this.optional(element)) {
            return true;
        }

        var ok = true;
        try {
            $.datepicker.parseDate('dd/mm/yy', value);
        }
        catch (err) {
            ok = false;
        }
        return ok;
    });
});
于 2012-12-29T12:06:38.393 に答える
12

Bohdan の例はうまくいきました。私はあなたの回答者を+1しました。

完全を期すために、すべてのパーツ (モデル、ビュー、カスタム EditorTemplate、jQuery インクルード、および Bohdan のソリューションの追加) を統合する方法に関するブログ投稿を書きました。

ここで読むことができます: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4

于 2013-07-31T01:59:03.840 に答える
4

古いことはわかっていますが、これを使用して、現在の日付形式の属性を入力に追加しました (CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower() を使用して ASP MVC コードからフェッチしました)。

次に、属性で見つかった形式を使用するように検証 JavaScript を書き直しました。

        var format = "mm/dd/yyyy";
        if (element.attributes["data-format"]) {
            format = element.attributes["data-format"].value;
        }

jquery ui datepicker の同じ属性も読み取りました。それほど有用ではないかもしれませんが、少なくとも文化とフォーマットの一貫性を保つことができます。誰かの役に立つかもしれないのに

于 2015-02-18T16:43:27.930 に答える
3

これを解決するために、他の回答とは異なるアプローチを取りました。jQuery を使用して、アプリケーションで設定された現在のローカル カルチャを使用するように日付を強制する新しい日付関数を追加します。

$.validator.addMethod('date', function (value, element) {
                var d = new Date();
                return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
            });

それは、jQuery 検証で失敗した場合です。ここで読むことができるエルトン・ストーンマンの投稿へのこの回答を信用します

これが他の誰かを助けることを願っています。

于 2015-02-26T23:01:36.647 に答える
1

jquery.validate.js でこれを直接変更してみてください。$.datpicker を使用する

date: function (value, element) {
    var s = value;

    var ind2 = 3;
    var ind3 = 6;
    var ind4 = 4;

    if (s.substr(6, 1) != "2") {
        ind2 = ind2 + 1;
        ind3 = ind3 + 1;
        ind4 = ind4 + 1;
    }

    var ndan = s.substr(0, 2);
    var nmje = s.substr(ind2, 2);
    var ngod = s.substr(ind3, ind4);

    var ns = ngod + "," + nmje + "," + ndan;

    return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));
于 2017-06-06T09:32:16.383 に答える