0

次のトピックで受け入れられた回答に基づいて、ドロップダウン DateTime コントロールとバリデーターを実装しました: How to validate a date using 3 dropdowns( day, month, year ) using jquery unobtrusive validation?

MVC4を使用しています。

この 3 つのドロップダウン日付はほとんど問題なく機能しますが、これらの 3 つのドロップダウンをクリックして別の値 (「選択されていない」値を含む) を選択すると、デフォルトの DateTime バリデーターから「生年月日のフィールドは日付でなければなりません」というエラー メッセージが表示されることがあります。有効な年/月/日を選択し、カスタム バリデータがパスしたとしても。

日付が正しく設定されている場合、このメッセージはフォームの POST を妨げませんが、このメッセージはユーザーにとって混乱を招きます。

Firebug で目立たないルールを調べると、このメッセージがデフォルトの「日付」ルールから来ていることがわかります。rules( "remove" (または delete rule, message) を使用してこのデフォルトの日付ルールを削除できることはわかっていますが、MVC がそのルールを再度追加するのを停止するためにそれらを削除する適切な時期がいつかはわかりません。

このデフォルトの「日付」ルールを削除して、カスタム ルールのみがこれら 3 つのドロップダウンで有効になるようにするにはどうすればよいですか?

4

2 に答える 2

1

私はこれを試していませんが、デフォルトのデータ型クライアント検証ルールがによって追加されていると思いますClientDataTypeModelValidatorProvider。このプロバイダーはデフォルトでオンになっています。ModelValidatorProvidersCollectionGlobal.asax.csからそれを削除してみることができます。

  var clientDataTypeProvider = ModelValidatorProviders.Providers.FirstOrDefault(p => p.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)));
  ModelValidatorProviders.Providers.Remove(clientDataTypeProvider);

注:これを削除すると、番号の検証も失われます。他のオプションは、カスタムClientDataTypeModelValidatorProviderを作成し、それをプロバイダーコレクションに追加することです。もう1つ、このアイデアはグローバルレベルで機能し、他のすべての場所に影響を与えるということです。

于 2012-09-20T14:25:12.467 に答える
0

だから私は簡単なハックを発明しました.誰かがそれを役に立つと思うか、改善する必要があるかもしれません:

function removeDefaultDateValidators(selector, validatorToRemove) {
    $('form').each(function () {
        var settings = $(this).validate().settings;
        $(selector, this).each(function () {
            // rules and messages seem to be keyed by element name, not id
            var elmName = $(this).attr('name');
            delete settings.rules[elmName][validatorToRemove];
            delete settings.messages[elmName][validatorToRemove];
        });
    });
}

$(function () {
    removeDefaultDateValidators('select[data-val-trippleddldate]', 'date');
});

ページが読み込まれると、すべてのフォームを繰り返し処理し、バリデーターを削除する必要がある要素を見つけます。私の場合、カスタムのtrippleddlddateバリデータを持つすべてのドロップダウンからデフォルトの日付バリデータを削除しています。

Firefox と IE 9 でテスト済み、「私のマシンで動作します」。

于 2012-09-20T09:59:58.243 に答える