客户端验证仅提交

时间:2012-10-25 00:58:53

标签: asp.net-mvc-3 validation client-side

好的,所以这是一个非常简单的场景,因为我刚刚开始使用MVC,所以我无法弄清楚。我创建了一个自定义密码验证器来同时使用客户端和服务器端。与此同时,客户端验证器除了检查长度之外什么都不做(一旦我开始工作,它会做更多的事情)。服务器端验证工作正常。这是客户端实现

$.validator.unobtrusive.adapters.add("password",
    function (options) {
        options.rules['password'] = {};
        options.messages['password'] = options.message;
    }
);
$.validator.addMethod("password", function (value, element, params) {
    if (value.length < 8 || value.length > 15) {
        return false;
    }
    return true;
}); 

我只希望在提交表单时触发此验证器。

目前,只要您开始输入,它就会告诉您密码无效,直到密码符合长度要求为止。我希望它像我在其他表单字段中使用的标准“必需”验证器一样,只有在提交表单后才会验证输入。

1 个答案:

答案 0 :(得分:1)

是的,所以我发现了一个类似的问题,其中有一些关于禁用keyup功能的答案:ASP.net MVC 3 jQuery Validation; Disable Unobtrusive OnKeyUp?但我发现了另一种方法,它不涉及编写额外的javascript行或关闭功能所有领域。基本上,我刚刚更改了jquery.validation.js文件中的实际函数,以检查名为nokeyup的属性,如果找到它,则返回。您可以在文件开头不太远的地方找到onkeyup函数。它最初看起来像这样

onkeyup: function(a, b) {
    if ( b.which === 9 && this.elementValue(a) === '' ) {
        return;
    }
    else if ( a.name in this.submitted || a=== this.lastActive ) {
        this.element(a);
    }
},

所以我把它改成了

onkeyup: function (a, b) {
    if (b.which === 9 && this.elementValue(a) === "") { 
        return;
    }
    else if (a.getAttribute('nokeyup')) { // Added this statement
        return;
    } 
    else if ( a.name in this.submitted || a=== this.lastActive ) {
        this.element(a);
    }
},

之后,我所要做的就是在我的文本框中添加'nokeyup'属性,我不想在表单提交之前激活验证。