3

ASP.NET MVC4 アプリケーションを開発しています。

My View Model クラス プロパティ

[DisplayName("Birth Date")]
        [Required(ErrorMessage = "You must indicate your full birthday")]
        [DataType(DataType.Date), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime BirthDate { get; set; }

Javascript コード

var dt = new Date();
    $(function () {
        $("#BirthDate").datepicker({
            showOn: "button",
            buttonImage: "@Url.Content("~/Content/themes/base/images/calendar.gif")",
            buttonImageOnly: true,
            dateFormat: 'dd/mm/yy',
            changeMonth: true,
            changeYear: true,
            yearRange: '1980:dt'
        });
    });

コードを表示

<div class="block">
                    @Html.LabelFor(model => model.BirthDate, new { @Class = "compel" })
                    @Html.TextBoxFor(model => model.BirthDate)
                </div>

アプリケーションを IE と Mozilla Firefox で実行すると問題なく動作しますが、Google chrome ではThe Value 24/12/2012 is invalid for Birth Dateとして検証エラーが発生します。

この問題を解決するのを手伝ってください。

4

4 に答える 4

1

IEとFirefoxはOSと同じ形式を使用しているようですが、Chromeは使用していません。これにより、日付の検証で問題が発生することがあります。

多分これはあなたの問題を解決するでしょう:Chromeでの目立たない検証はdd / mm/yyyyで検証されません

于 2013-01-16T14:53:05.573 に答える
1

日付形式でこれを試すことができます: 例: '31/12/1999'

 jQuery.extend(jQuery.validator.methods, {
        date: function (value, element) {
            return /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/.test(value);
        }
    });
于 2016-03-31T10:01:57.273 に答える
1

私が行った問題を解決するには:

  1. スクリプト datepicker-fr.js への参照を追加します (ここで見つけることができますhttps://github.com/jquery/jquery-ui/tree/master/ui/i18n )。
  2. 関数を作成し、カスタム JavaScript ファイルに追加します。

     function extendJQueryDateValidation() {
    
    // fix date validation for chrome
    jQuery.extend(jQuery.validator.methods, {
        date: function (value, element) {
            var isChrome = window.chrome;
            // make correction for chrome
            if (isChrome) {
                var d = new Date();
                return this.optional(element) ||
                !/Invalid|NaN/.test($.datepicker.parseDate("dd/mm/yy", value));
            }
                // leave default behavior
            else {
                return this.optional(element) ||
                !/Invalid|NaN/.test(new Date(value));
            }
        }
    });
    }
    

    http://devdens.blogspot.com/2011/11/jquery-validation-fix-for-date-format_29.htmlを参照してください。

  3. 私が行う日付入力要素があるページで:

            $(function () 
         {          
          extendJQueryDateValidation();        
          $.datepicker.setDefaults($.datepicker.regional   ["fr"]);    
                   $("#dateField").datepicker(
        { yearRange: "1980:2015", 
     dateFormat: "dd/mm/yy", 
     changeMonth: true, 
     changeYear: true });
    
               });
    
于 2015-07-29T15:52:46.483 に答える
0

これを検索したところ、ここや他の場所で複数の質問が見つかりました。簡単な解決策を見つけたので、将来の検索者にも共有したいと思いました。

https://stackoverflow.com/a/36903550/1997092

このエラーの最も簡単な修正は、検証ファイルを呼び出した後の次のコード スニペットであることがわかりました。

jQuery.validator.methods["date"] = function (value, element){
    var shortDateFormat = "dd/mm/yy";
    var res = true;
    try {
        $.datepicker.parseDate(shortDateFormat, value);
    } catch (error) {
        res = false;
    }
    return res;
}

2016年に見つかったバージョンでも、FirefoxではなくChromeで上記のコードがなくてもこの問題が発生します。

これは、機能するために追加のライブラリやプラグインを必要としないため、私の推奨するソリューションです。

ここで問題をグーグルで調べているときに、このコードスニペットを見つけました。

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

于 2016-04-28T01:20:23.007 に答える