我有一个创建表单来创建一个对象。创建模型有一些属性只有在选中复选框并被标记为required (按模型中的属性)时才可见(.hide,.show())。
不幸的是,当复选框未被选中时,将对隐藏的属性执行所需的验证。
如何禁用此属性所需的验证?
我尝试将input元素的data-val属性设置为false,但不起作用。
有什么想法吗?
提前感谢托比亚斯
更新:
下面是java脚本代码。data-val属性已正确设置为false。似乎验证并不关心这个属性。还有data-val-required属性,但是有一个我无法备份的文本。
$(function () {
$("#MyCheckbox")
.change(function () {
if (this.checked) {
$("#divWithChildProperties [data-val]").attr("data-val", true);
$("#divWithChildProperties ").show();
}
else {
$("#divWithChildProperties [data-val]").attr("data-val", false);
$("#divWithChildProperties ").hide();
}
})
});
发布于 2011-09-12 17:44:31
我曾经使用自定义的验证属性处理过这样的情况。您可以创建一个RequiredIf属性,并仅在另一个属性是某个特定值时才使某些属性成为必需属性,而不是对属性使用Required属性。
这里有一篇关于创建这样的属性的文章(页面中间“一个更复杂的自定义验证器”部分下的示例):http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2
如果您的复选框表示模型中的一个属性,这应该可以很好地工作。
如果您不想使用新的验证属性来处理这个问题,那么除了将data-val属性更改为false之外,还需要做更多的事情。当jQuery validate首先解析表单时,它会将值存储在表单数据中。所以仅仅改变data-val是不够的。此外,您还必须删除存储的验证数据并重新解析表单。下面是一个例子:
// Do this after you've removed/modified the data-val attribute
$('selector for your form').removeData('unobtrusiveValidation');
$('selector for your form').removeData('validator');
$.validator.unobtrusive.parse('selector for your form');
发布于 2015-08-27 11:41:24
您可以使用以下JQuery移除元素的所有验证规则
$('#ElementId').rules('remove');
与使用类名的方式一样,
$('.ElementClassName').rules('remove');
如果要删除特定于的规则,请执行以下操作
$('#ElementId').rules('remove', 'required');
发布于 2011-09-12 18:40:42
MVC提供的不起眼的javascript插件不会动态处理数据属性。相反,它解析文档就绪的结果并缓存它们。
在修改了有问题的属性之后,尝试在表单上调用$.validator.unobtrusive.parse(myForm)
,看看它是否给出了预期的结果。
https://stackoverflow.com/questions/7389652
复制