6

日付型の入力を持つasp.net MVC4を使用して、データ入力フォームを設計しています。

クロムとjQueryUI datepickerで目立たないjQueryライブラリを使用すると、datepicker(つまり、14/02/2013)を使用して正しい日付形式を選択し、フォームを送信した後、まだエラーが発生しました(フィールドnews_dateは日付でなければなりません)。

一部の検索では、jQuery.globilization ライブラリを使用する必要があることが示唆されました。ドキュメントを読んだ後、次のスクリプトへの参照を追加しました。

$(document).ready(function () {
    $.culture = Globalize.culture("en-GB");
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || Globalize.parseDate(value, "dd/MM/yyyy", "en-GB");
    }
});

しかし、私はまだエラーが発生しています

上記のコードを chrome でデバッグすると、"value) の値が "2014-02-14" であることがわかります。

以下は、レンダリングされる html です。

<div class="editor-field">

<input class="text-box single-line datepicker hasDatepicker input-validation-error" data-val="true" data-val-date="The field news_date must be a date." id="news_date" name="news_date" type="date" value="">
<script type="text/javascript">
    $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
    });
    </script>
            <span class="field-validation-error" data-valmsg-for="news_date" data-valmsg-replace="true"><span for="news_date" class="" style="">The field news_date must be a date.</span></span>
        </div>

UPDATE : ちなみに、バリデータ メソッドをハードコードに変更した場合。すなわち

$.validator.methods.date = function (value, element) {
    return this.optional(element) || Globalize.parseDate("14/03/2014", "dd/MM/yyyy", "en-GB")
}

できます。したがって、問題である POST または送信の検証の前に、日付がページに保存されている形式であることは間違いないようです。

クロムコンソールで実行すると日付を選択した後に更新$('#news_date').val()すると、「2014-02-14」が表示され、スクリプトをデバッグして、値がバリデータメソッドに渡されていることを確認できます。これはこの値であるため、英国の日付と一致しませんformat は、検証に合格する値ではなく、null を返します。では、日付ピッカーが選択後に日付を保存する方法に問題がありますか?

Chromeでこれに対する回避策を見つけた人はいますか?

4

3 に答える 3

11

この回避策はクロムなどを処理するようです。クロムでは間違った日付を入力できないため、日付ピッカーは有効な日付を提供し、バリデータ関数に渡すとyyyy-mm-dd形式になります。つまり、入力に直接入力するか、ピッカーを使用して、無効な日付、つまり 2013 年 2 月 30 日 (en-GB カルチャでは無効) を入力すると、正しく無効になり、それ以上の進行が妨げられます。より良い提案がない場合、これを実行可能な最良の回答としてうまくいかないと思います

$(document).ready(function () {
$.culture = Globalize.culture("en-GB");
$.validator.methods.date = function (value, element) {
    //This is not ideal but Chrome passes dates through in ISO1901 format regardless of locale 
    //and despite displaying in the specified format.

    return this.optional(element)
        || Globalize.parseDate(value, "dd/mm/yyyy", "en-GB")
        || Globalize.parseDate(value, "yyyy-mm-dd");
}});
于 2013-03-02T09:23:46.880 に答える
-1
$(function () {
        $(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
 });
于 2013-11-26T10:55:08.407 に答える
-1

別の回避策を提案できますか。これを web.config に入れて、異なるカルチャ設定の問題を回避してください。

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>

Jquery datepicker では、これで十分です。

 $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
 });
于 2013-03-01T03:26:59.337 に答える