我一直在尝试实现ASP.NET MVC自定义验证方法。我使用的教程如codeproject解释说您将data-val-customname
添加到元素中。然后jQuery.validate.unobtrusive.js
然后使用属性的第三段
data-val-<customname>
作为规则的名称,如下所示。
$.validator.addMethod('customname', function(value, element, param) {
//... return true or false
});
但是我无法获取要触发的自定义方法。通过游戏我已经能够得到以下代码工作,但根据所有来源我读过Unobtrusive验证不应该像这样工作。
$.validator.addMethod('data-val-customname', function(value, element, param) {
//... return true or false
});
我发布了两种方法的示例 jsfiddle example
非常感谢任何帮助
我希望更新我的问题,以便更清楚。
答案 0 :(得分:0)
我终于找到了最终到达那里,但仍感觉太辛苦了,因此我可能有些不对劲。最初我被Chrome Canary 62中的一个错误所打破,该错误拒绝允许添加自定义方法。
我的下一个问题是必须在标记中加载jQuery,jQuery.validate和jQuery.validate.unobtrusive,然后在ES6类中隔离javascript实现。由于我的类结构和独立于jQuery的app文件加载,我不想在$().ready()
之前添加我的适配器。所以我不得不强迫$.validator.unobtrusive.parse(document);
。
尽管如此,我仍然遇到问题并最终调试了源代码,发现附加到表单的现有验证器信息未与更新的解析规则合并,并且基本上忽略了添加的任何新适配器。
我最后的工作和承认感觉就像我做得太多,就是在我强行重新解析之前销毁初始验证信息。
这是工作jsfiddle demo
这是一些简化的代码
onJQueryReady() {
let formValidator = $.data(document.querySelector('form'), "validator" );
formValidator.destroy();
$.validator.unobtrusive.adapters.add("telephone", [], function (options) {
options.rules['telephone'] = {};
options.messages['telephone'] = options.message;
});
$.validator.unobtrusive.parse(document);
$.validator.addMethod("telephone", this.handleValidateTelephoneNumber);
}