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;
}
);
ありがとう!