自定义不引人注意的验证方法不按文档触发

时间:2017-09-04 16:33:18

标签: javascript jquery asp.net-mvc unobtrusive-validation

我一直在尝试实现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

非常感谢任何帮助

我希望更新我的问题,以便更清楚。

1 个答案:

答案 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);
}