10

RequiredAttributeから継承して実装することにより、クライアントとサーバーの両方で MVC モデルを検証する独自の条件付き検証属性を作成しましたIClientValidatable。アイデアは、モデルのブール プロパティが true の場合、別のプロパティが必要であるということです。ビューでは、これはテキストボックスに入力する必要があるかどうかを示すチェックボックスとして現れます。

これは、ユーザーが次のアクションを実行する場合を除いて、完全に機能します。

  • チェックボックスをオンにします (フィールドは必須になりました)。
  • フォームを送信します (クライアント側の検証が実行され、エラー メッセージが表示されます)。
  • ユーザーがボックスのチェックを外します (エラー メッセージが残り、フィールドは不要になりました)。

チェックボックスがオンまたはオフになったときにフォームを再検証したい、またはそのフィールドを再検証して、エラーメッセージが表示されないようにしたい. jQueryvalidate()メソッドを呼び出すさまざまな組み合わせを試しましたが、検証を再実行できるものはないようです。

次の JavaScript を使用して、検証機能と関連する目立たないアダプターを設定します。

$.validator.addMethod(
    "requiredif",
    function(value, element, parameters) {
        var selector = "#" + parameters["dependentpropertyname"];
        var triggerValue = parameters["triggervalue"].toString().toLowerCase();
        var actualValue = $(selector).is(":checked").toString().toLowerCase();
        if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters);

        return true;
    });

$.validator.unobtrusive.adapters.add(
    "requiredif",
    ["dependentpropertyname", "triggervalue"],
    function(options) {
        options.rules["requiredif"] = {
            dependentpropertyname: options.params["dependentpropertyname"],
            triggervalue: options.params["triggervalue"]
        };
        options.messages["requiredif"] = options.message;
    }
);

ありがとう!

4

2 に答える 2

17

jquery validate と jquery ui を使用して datepicker フィールドを再検証したいという同様の問題がありました。 この投稿は、私がそれを理解するのに役立ちました。

重要なのは、そのセレクターの有効なメソッドにコールバックを追加することです。何かのようなもの:

$(".requiredif").change(function() {
  $(this).valid();
})
于 2012-10-11T19:39:03.600 に答える
-5

FoolproofValidationを確認する必要があります。それはあなたがあなた自身を転がす必要なしにあなたがしようとしていることをします。

于 2012-07-18T14:55:02.283 に答える