web-dev-qa-db-ja.com

MVC DateTime検証-英国の日付形式

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

私の問題は、日付が正しい形式(dd/MM/yyyy)である場合、日付が無効であると通知され続けることです

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

ここに欠けている明らかなものはありますか?

39
mp3duck

実際には、日付に対して控えめな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;
    });
});
100
Bohdan

Bohdanの例は大成功でした!あなたの回答仲間を+1しました。

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

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

12
kestrelb

古いことはわかっていますが、これを使用して、現在の日付形式(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についても同じ属性を読みました。それほど有用ではないかもしれませんが、少なくとも文化との一貫性を保つことができます。それは誰かを助けることができるけれども

4
Rachid

他の回答と比較して、これを解決するために別のアプローチを取りました。 jQueryを使用して、アプリケーションで現在のローカルカルチャセットを強制的に使用する新しい日付関数を追加します。

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

JQuery検証で失敗した場合です。エルトン・ストーンマンの投稿へのこの回答は、 こちら で読むことができます。

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

3
AIM

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));
1
zvonimir