質問

手動UppGradeの指示に従って、MVC 3 WebアプリをMVC 4にアップグレードしました。すべてが問題なくなり、アプリはIE9で実行されています。クライアント側とサーバー側の両方の検証を備えたいくつかのデータ型のフィールドを備えたフォームがあり、フォームが送信されたときにすべてが正しく処理されます。

しかし、他のブラウザを使用すると、Firefox 8、Chrome 15、およびSafari 5.1.1でテストされた場合、日付フィールドを検証すると失敗します。私はフォーマットDD-MM-yyyyで日付を持つ「PT-PT」文化を使用しています。IE9では検証に合格しますが、他のブラウザではフィールドは有効な日付ではないと言います。

ティア

Joaquim

役に立ちましたか?

解決

問題はjqueryの検証にあることがわかりました。 JavaScriptの日付コンストラクターに電話して、日付が有効かどうかを確認します。

    // http://docs.jquery.com/Plugins/Validation/Methods/date
    date: function(value, element) {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    },

JavaScriptの日付コンストラクターは、yyyy-mm-ddの形式の日付を予想しているため、ポルトガル形式のDD-MM-yyyの日付に無効に戻りました。

例外は、IEが無効ではなく、導入した日付とは異なる日付です。

ソリューションは、コードを使用してjquery.validate-pt.jsを作成して、フォーマットの正しいものを使用して検証をオーバーライドすることでした。

$.validator.methods.date = function (value, element) {
    return this.optional(element) || ( /^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}(\s\d{2}:\d{2}(:\d{2})?)?$/.test(value)
        && !/Invalid|NaN/.test(new Date(value.replace("/", "-").split("-")[2], value.replace("/", "-").split("-")[1], value.replace("/", "-").split("-")[0])));
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top