MVC 4:Firefox、Chrome、Safariの日付検証エラー-IE OK
-
25-10-2019 - |
質問
手動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])));
}
所属していません StackOverflow