我在創建自定義不顯眼驗證方面相當新,並且遇到了一個奇怪的問題。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,因爲這導致我走下了正確的軌道。「成功」響應基本上被忽略,因爲它沒有響應驗證功能,而是成功功能。看到我的答案爲修復。 –