我创建了自己的条件验证属性,通过继承RequiredAttribute
并实现IClientValidatable
来验证客户端和服务器上的MVC模型。我的想法是,如果我的模型上的布尔属性为true,则需要另一个属性。在视图中,这表示为一个复选框,用于指示是否需要填写文本框。
除了用户执行以下操作时,此功能非常完美:
我想在选中或取消选中复选框时重新验证表单,或者甚至更好地重新验证该字段,以便不再显示错误消息。我尝试过调用jQuery validate()
方法的各种组合,但似乎没有什么能够重新运行验证。
我使用以下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;
}
);
谢谢!
答案 0 :(得分:15)
我有一个类似的问题,我想使用jquery validate和jquery ui重新验证一个datepicker字段。 This post让我明白了。
键,只是为该选择器的有效方法添加回调。类似的东西:
$(".requiredif").change(function() {
$(this).valid();
})
答案 1 :(得分:-4)
你应该看看Foolproof Validation。如果你不必自己动手,它就会做你想做的事。