通过JavaScript禁用所需的验证
我有一个创建表单来创建一个对象。 “创建模型”中的某些属性只有在选中复选框并标记为“必需”(按模型中的属性)时才可见(.hide、.show()) 不幸的是,当复选框未选中时,将对隐藏的属性执行所需的验证 如何禁用此属性所需的验证 我尝试将输入元素的dataval属性设置为false,但这不起作用 有什么想法吗 提前谢谢 托拜厄斯 更新: 下面是java脚本代码。data val属性已正确设置为false。似乎验证并不关心此属性。还有data val required属性,但有一个文本我无法备份通过JavaScript禁用所需的验证,javascript,asp.net-mvc-3,validation,unobtrusive-javascript,Javascript,Asp.net Mvc 3,Validation,Unobtrusive Javascript,我有一个创建表单来创建一个对象。 “创建模型”中的某些属性只有在选中复选框并标记为“必需”(按模型中的属性)时才可见(.hide、.show()) 不幸的是,当复选框未选中时,将对隐藏的属性执行所需的验证 如何禁用此属性所需的验证 我尝试将输入元素的dataval属性设置为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();
}
})
});
非结构化验证查找此属性
data val=“true”
我猜,如果您执行$('#mycheckbox').data('val','false')
,验证将跳过具有该id的项
也许有一种更合适的方法,但如果没有,就用这个
干杯。默认的
DataAnnotationsModelValidatorProvider
为所有值类型添加必需的属性。您可以通过在中添加代码来更改此行为。我使用自定义验证属性处理过类似的情况。不必为属性使用Required属性,您可以创建RequiredIf属性,并且仅当另一个属性为某个值时,才将某些属性设置为Required属性
这里有一个关于创建这样的属性的帖子(在“更复杂的自定义验证器”部分下的页面中间的例子):
如果您的复选框表示模型中的某个属性,那么这应该可以正常工作 如果您不想使用新的验证属性处理此问题,那么除了将data val属性更改为false之外,您还需要做更多的事情。当jqueryvalidate第一次解析表单时,它将值存储在表单的数据中。所以仅仅更改数据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');
MVC提供的不引人注目的javascript插件不会动态处理数据属性。相反,它在documentready上解析结果并缓存它们
修改相关属性后,尝试在表单上调用
$.validator.unobtrusive.parse(myForm)
,以查看它是否提供了预期的结果。您可以实现像“RequiredIf”这样的自定义验证器
这将使您的模型设计非常明显(不同于仅提出的客户端解决方案)。这允许您将验证逻辑与显示逻辑分开(这就是MVC的全部内容)
看看这个答案:
最后那篇博文:
干杯 有很多方法可以在Javascript中禁用不引人注目的验证,但其中大多数方法似乎有点不太成熟
您无需重置所有消息、输入样式和验证摘要即可提交表单,但如果您希望在加载页面后更改验证,则此功能非常有用。否则,即使更改验证,以前的错误消息仍将可见…您可以使用以下JQuery删除元素的所有验证规则
$('#ElementId').rules('remove');
使用类名的方法与此相同
$('.ElementClassName').rules('remove');
如果要删除特定规则,请执行以下操作
$('#ElementId').rules('remove', 'required');
该复选框显示或隐藏输入字段。正如我写的那样,我已经尝试将所有输入字段的data val属性设置为false.lol,我只想将搜索字段添加到索引页。感谢第一个选项在MVC4中似乎不适合我。
$('.ElementClassName').rules('remove');
$('#ElementId').rules('remove', 'required');