Tob*_*ias 9 javascript validation unobtrusive-javascript asp.net-mvc-3
我有一个创建表单来创建一个对象.如果选中了复选框并且标记为必需(通过模型中的属性),则创建模型具有一些仅可见的属性(.hide,.show()).
不幸的是,如果未选中该复选框,则会对隐藏的属性执行所需的验证.
如何禁用此属性所需的验证?
我尝试将input元素的data-val属性设置为false,但这不起作用.
有点想法吗?
在此先感谢Tobias
更新:
这是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();
}
})
});
Run Code Online (Sandbox Code Playgroud)
bba*_*bak 22
我用自定义验证属性处理了这样的情况.除了使用属性的Required属性之外,您可以创建RequiredIf属性,并且仅当另一个属性是特定值时才需要使用某些属性.
这是一篇关于创建这样的属性的帖子(在"更复杂的自定义验证器"部分的页面中间的示例):http://www.devtrends.co.uk/blog/the-complete-guide -to验证功能于asp.net-MVC -3-部分-2-
如果您的复选框代表模型中的属性,这应该可以正常工作.
如果您不想使用新的验证属性来处理此问题,则除了将data-val属性更改为false之外,您还需要做更多的事情.当jQuery验证首先解析您的表单时,它会将值存储在表单的数据中.所以简单地改变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');
Run Code Online (Sandbox Code Playgroud)
您可以使用以下JQuery删除元素的所有验证规则
$('#ElementId').rules('remove');
Run Code Online (Sandbox Code Playgroud)
你也可以使用类名,
$('.ElementClassName').rules('remove');
Run Code Online (Sandbox Code Playgroud)
如果要删除特定规则,请执行此操作
$('#ElementId').rules('remove', 'required');
Run Code Online (Sandbox Code Playgroud)