我在创建自定义不显眼验证方面相当新,并且遇到了一个奇怪的问题。MVC定制不显眼验证总是显示消息
此验证基本上只是检查数据库(通过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时停留在那里。
任何想法是怎么回事?
+1,因为这导致我走下了正确的轨道。“成功”响应基本上被忽略,因为它没有响应验证功能,而是成功功能。看到我的答案为修复。 –