我在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而且使用不引人注目的错误或加载方式?
答案 0 :(得分:1)
因此,经过一些搜索,阅读jquery验证器api文档并理解mvc如何不引人注意的工作,我终于找到了我需要做的事情。
在我的自定义验证方法中,我需要做的就是以下内容。
$('form').validate().showErrors({
'text_fkAccountCodeTo': 'Required when Amount greater then zero.'
});