MVC3不显眼的validation:如何从一组元素中删除/重新附加validation?

这是用例:

如果用户在其中一个可见输入中进行了某个选择,那么只有一组字段才能显示这个长字形。 阅读Brad Wilson关于这个主题的post我认为jQuery.validator.unobtrusive.parse(’。extra-data’)其中.extra-data是一个隐藏div的类。 没有运气,因为第一次解析完成后数据已经存在。

所以最后我提出了这个删除规则:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { var currentRules = $(item).rules('remove'); // Saving removed rules to a sorta dictionary if (!$.isEmptyObject(currentRules)) { removedRules[$(item).attr("name")] = currentRules; } }); 

并重新附加它们:

 $('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { if (!$.isEmptyObject(removedRules[$(item).attr('name')])) { $(item).rules('add', removedRules[$(item).attr('name')]); } }); 

问题是,感觉有点像hacky,因为我真的经历了每个字段删除并重新附加这些validation规则。 我的问题是:是不是有更简单的方法? 性能也是一个问题,在其中一种巨大的forms中,您可以感觉到点击和validation运行之间的延迟。

不要删除并重新附加规则。 只需disableenable输入。 禁用字段不参与validation,也不会提交给服务器。

 //disable inputs. No validation will occur on these $('.data-panel').find('input[type="text"], textarea, select').attr('disabled', 'disabled'); //enable inputs. Validation is re-enabled $('.data-panel').find('input[type="text"], textarea, select').removeAttr('disabled');