【发布时间】:2011-11-03 15:23:52
【问题描述】:
我在创建自定义不显眼的验证方面还很陌生,但遇到了一个奇怪的问题。
这个验证基本上只是检查数据库(通过 Ajax)来查看型号和序列号组合是否已经存在。 jQuery 和 Ajax 的行为似乎符合预期,但我的验证消息会在我的验证函数被调用时出现。
这是我的 jQuery:
$.validator.addMethod('newserialandmodel',
function (value, element, parameters) {
var modelNumber = $('#ProductInformation_ModelNumber').val();
var serialNumber = value;
var token = $('input[name=__RequestVerificationToken]').val();
$.ajax({
type: "POST",
url: "/ajax/getmodelandserialexists/",
data: ({
modelNumber: modelNumber,
serialNumber: serialNumber,
'__RequestVerificationToken': token
}),
cache: true,
dataType: 'json',
success: function (response) {
if (response.exists) {
$.validator.messages.newserialandmodel =
$.format($.validator.messages.newserialandmodel);
}
return !response.exists;
}
});
return false;
}
);
$.validator.unobtrusive.adapters.add(
'newserialandmodel',
function (options) {
options.rules['newserialandmodel'] = options.params;
if (options.message != null) {
$.validator.messages.newserialandmodel = options.message;
}
}
);
表单元素如下所示:
<input type="text" value=""
name="ProductInformation.SerialNumber" id="ProductInformation_SerialNumber"
data-val-required="The Serial number field is required."
data-val-newserialandmodel="There is already a contract with the provided model and serial numbers."
data-val-length-max="30"
data-val-length="The 30 field requires no more than 30 characters."
data-val="true" class="input-validation-error">
当我单步执行时,只要它到达验证的第一行,就已经显示了消息:
已与提供的型号和序列号签订了合同。
此外,即使函数返回 true,消息仍然存在。
函数/Ajax 的其余部分工作正常,我可以弄清楚为什么它会立即显示此消息,以及为什么当我返回 true 时它会停留在那里。
知道发生了什么吗?
【问题讨论】:
标签: jquery asp.net-mvc-3 unobtrusive-validation