1

手動アップグレードの手順に従って、mvc3Webアプリをmvc4にアップグレードしました。すべてがうまくいき、アプリはIE9で実行されています。クライアント側とサーバー側の両方で検証されたいくつかのデータ型のフィールドを持つフォームがあり、フォームが送信されたときにすべてが正しく処理されます。

しかし、Firefox 8、Chrome 15、Safari 5.1.1でテストした他のブラウザを使用すると、日付フィールドの検証に失敗します。日付がdd-MM-yyyyの形式の「pt-PT」カルチャを使用しています。前述したように、IE9では検証に合格しますが、他のブラウザーでは、フィールドが有効な日付ではないと表示されます。

TIA

Joaquim

4

1 に答える 1

8

問題はJQueryの検証にあることがわかりました。javascript Dateコンストラクターを呼び出して、日付が有効かどうかを確認します。

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

javascript Dateコンストラクターは、yyyy-MM-ddの形式の日付を予期しているため、ポルトガル語の形式dd-MM-yyyの日付に対してInvalidを返しました。

例外は、無効を返さない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])));
}
于 2011-12-07T14:19:53.730 に答える