【问题标题】:How to remove default client-side validators?如何删除默认的客户端验证器?
【发布时间】:2012-09-20 08:50:12
【问题描述】:
【问题讨论】:
标签:
asp.net-mvc
validation
【解决方案1】:
我没有尝试过,但我猜默认数据类型客户端验证规则是由ClientDataTypeModelValidatorProvider 添加的。此提供程序默认为 ON。您可以尝试从 Global.asax.cs 中的 ModelValidatorProvidersCollection 中删除它。
var clientDataTypeProvider = ModelValidatorProviders.Providers.FirstOrDefault(p => p.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)));
ModelValidatorProviders.Providers.Remove(clientDataTypeProvider);
注意:如果删除它,您也将失去对 number 的验证。其他选项是创建自定义 ClientDataTypeModelValidatorProvider 并将其添加到提供程序集合中。还有一件事是这个想法在全球范围内有效,并影响到所有其他地方。
【解决方案2】:
所以我发明了一个快速技巧,也许有人会觉得它有用或者有什么需要改进的地方:
function removeDefaultDateValidators(selector, validatorToRemove) {
$('form').each(function () {
var settings = $(this).validate().settings;
$(selector, this).each(function () {
// rules and messages seem to be keyed by element name, not id
var elmName = $(this).attr('name');
delete settings.rules[elmName][validatorToRemove];
delete settings.messages[elmName][validatorToRemove];
});
});
}
$(function () {
removeDefaultDateValidators('select[data-val-trippleddldate]', 'date');
});
当页面加载时,它会遍历所有表单并找到应该删除验证器的元素。在我的情况下,我正在从所有具有我的自定义tripledlddate 验证器的下拉列表中删除默认日期验证器。
在 Firefox 和 IE 9 中测试,“在我的机器上运行”。