Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript禁用所需的验证_Javascript_Asp.net Mvc 3_Validation_Unobtrusive Javascript - Fatal编程技术网

通过JavaScript禁用所需的验证

通过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属性,但有一个文本我无法备份

我有一个创建表单来创建一个对象。 “创建模型”中的某些属性只有在选中复选框并标记为“必需”(按模型中的属性)时才可见(.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');