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

MVC3 unobtrusive validation: how to remove/re-attach validation from a group of elements?

本文关键字:验证 元素 一组 新附加 删除 不显眼 MVC3      更新时间:2023-09-26

用例如下:

我有一个长表单,其中包含一组字段,只有当用户在其中一个可见输入中做出特定选择时才会显示。阅读Brad Wilson关于这个主题的帖子,我认为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')]);
    }
});

问题是,它感觉有点黑客,因为我逐字逐句地通过每个字段删除和重新附加那些验证规则。我的问题是:没有更直接的方法吗?性能也是一个问题,在这些巨大的表单中,您可以感觉到点击和验证运行之间的延迟。

不要删除和重新附加规则。只有disableenable输入。被禁用的字段不参与验证,也不会提交给服务器。

//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');