自定义验证方法和消息

时间:2015-07-08 19:54:24

标签: jquery asp.net asp.net-mvc

我在ASP.NET MVC网站上工作。我试图在某些字段中添加自定义验证。验证按照应有的方式进行。但是,我还添加了我想要显示的自定义错误消息。这些自定义消息未显示。

我错过了什么?

<input class="text-box single-line checkAmount" 
      data-val="true" data-val-number="The field Amount From must be a number." 
      data-val-range="Must be within range -9999999999999999.99 and 9999999999999999.99." 
      data-val-range-max="1E+16" data-val-range-min="-1E+16" 
      data-val-required="Required." id="AmountFrom" name="AmountFrom" 
      type="text" value="0.00">

<script type="text/javascript">
    $(document).ready(function() {
        $.validator.addMethod('checkAmount', function(value, element) {
            return false; //testing
        }, 'this displays instead');
        $('form').validate({
            rules: {
                AmountFrom: {
                    checkAmount: true
                },
                AmountTo: {
                    checkAmount: true
                }
            },
            messages: {
                AmountFrom: {
                    checkAmount: 'Amount must be greater then zero when account code selected.'
                },
                AmountTo: {
                    checkAmount: 'Amount must be greater then zero when account code selected.'
                }
            }
        });
    });
</script>

因此,在浏览验证码后,这就是我所发现的。当我打电话给以下人员时:

$.validator.addMethod('checkAmount', function (value, element) {
    //my code from above
});

$('form').validate({
    rules: {
        //my rules from above
    },
    messages: {
        //my messages from above
    }
});

调用$('form').validate但似乎从不应用消息。我相信这是真的一个原因是因为当验证插件触发时,代码中会发生以下情况:

$.extend($.fn, {
    validate: function(options){
        if(!this.length) {
            if(options && options.debug && window.console){
                console.warn( "Nothing selected, can't validate, returning nothing." );
            }
            return;
        }

        var validator = $.data( this[ 0 ], "validator" );
        if ( validator ) {
            return validator;
        }
        //REMOVED REMAING CODE FOR READABILITY
    }
});

因此,当它到达if(validator) { return validator}行时,它会返回。

另一个原因是,如果我在Chrome浏览器的开发工具中输入$('form').validate().settings.messages,我会收到邮件对象,其中一个是 text_fkAccountCodeFrom 。但是,当我展开此对象时,它没有列出自定义消息。验证运行时,其中一个内部调用是名为 defaultMessage 的函数,该函数调用另一个名为this.customMessage(element.name, method)的函数。 customMessage 函数执行以下操作:

customMessage: function(name, method){
    var m = this.settings.messages[name];
    return m && (m.constructor === String ? m : m[method];
}

当此代码运行时会触发自定义消息。但是,由于邮件永远不会被设置,因此会拉出默认值,在我的 addMethod 中会显示,而不是

现在,如果我这样做:

$('form').validate().settings.messages.text_fkAccountCodeFrom = {checkAmount:'Required when Amount greater then zero.'};

我收到自定义消息。

所以我不确定它是不是因为MVC而且使用不引人注目的错误或加载方式?

1 个答案:

答案 0 :(得分:1)

因此,经过一些搜索,阅读jquery验证器api文档并理解mvc如何不引人注意的工作,我终于找到了我需要做的事情。

在我的自定义验证方法中,我需要做的就是以下内容。

$('form').validate().showErrors({
    'text_fkAccountCodeTo': 'Required when Amount greater then zero.'
});