【发布时间】:2018-02-08 00:38:55
【问题描述】:
以下是我的应用程序中的表单验证 javascript:
$('#EmploymentHistoryForm').validate({
ignore: ':hidden, [readonly=readonly]',
rules: {
'MemberJob.Phone': {
PhoneFieldValidation: true
}
},
messages: {
'MemberJob.Phone': {
PhoneFieldValidation: $.viewUrl.url.invaliedPhoneMessage
}
},
showErrors: function (errorMap, errorList) {
ShowErrors(errorMap, errorList, this.validElements());
},
submitHandler: function (form, event) {
event.preventDefault();
return false;
}
});
在这里,$.viewUrl.url.invaliedPhoneMessage 设置在 cshtml 页面(在 ASP.NET MVC 中),在调试 javascript 时,我可以在 $('...').validate 时看到该变量中的正确值函数被命中。
我在 JQuery 验证器集合中注册了一个新的验证器“PhoneFieldValidation”:
$.validator.addMethod("PhoneFieldValidation", ValidatePhoneAndAltPhone);
以下是我为其添加了此验证规则的输入控件的呈现 HTML:
<input class="PhoneFieldValidation" id="MemberJob_Phone" name="MemberJob.Phone" type="text" required="required" aria-required="true">
我可以看到验证被正确触发。这意味着,“ValidatePhoneAndAltPhone”方法被调用,并根据输入返回一个布尔结果。
但是,错误消息没有正确显示。它显示“警告:没有为 MemberJob.Phone 定义消息”而不是“无效的电话号码”。
通过 jquery.validate.js 的 customMessage 函数进行调试时,我可以看到“this.settings.messages”集合没有“MemberJob.Phone”字段的消息,这看起来是这个问题的根本原因.
知道如何解决这个问题吗?
我知道我们可以在 HTML 标签中添加“data-msg-[rulename]”属性来解决这个问题。但我确信我目前遵循的方法也是正确的。好像我错过了什么。
对此的任何帮助将不胜感激。
谢谢
【问题讨论】:
-
你永远不会提到
$.viewUrl.url.invaliedPhoneMessage来自哪里。
标签: javascript jquery asp.net-mvc jquery-validate unobtrusive-validation