Проверка нескольких полей с помощью Remote Validation
У меня есть следующая модель:
public class Customer
{
public string FirstName {get;set;}
public string LastName {get; set;}
[Remote("CardExisting", "Validation", AdditionalFields="FirstName,LastName")
public string CardNumber {get; set;}
}
Действие CardExisting проверит наличие существующей записи для комбинации cardNumber для firstName и LastName.
Что делать, если пользователь сначала вводит номер карты, а затем его имя, я не могу его проверить, поэтому, когда он возвращается и вводит свое имя, мне нужно снова проверить подтверждение, как я могу это сделать, когда фокус уже потерян из свойства cardnumber?
Ответы
Ответ 1
Развернувшись на ответ Jaluka, я написал этот вспомогательный метод, который находит каждый удаленный элемент проверки, который имеет "дополнительные поля", а затем заставляет валидацию этого элемента загораться каждый раз, когда изменяется одно из этих полей.
// I hate naming things
function initializeRemotelyValidatingElementsWithAdditionalFields($form) {
var remotelyValidatingElements = $form.find("[data-val-remote]");
$.each(remotelyValidatingElements, function (i, element) {
var $element = $(element);
var additionalFields = $element.attr("data-val-remote-additionalfields");
if (additionalFields.length == 0) return;
var rawFieldNames = additionalFields.split(",");
var fieldNames = $.map(rawFieldNames, function (fieldName) { return fieldName.replace("*.", ""); });
$.each(fieldNames, function (i, fieldName) {
$form.find("#" + fieldName).change(function () {
// force re-validation to occur
$element.removeData("previousValue");
$element.valid();
});
});
});
}
Вызвать функцию следующим образом:
$(document).ready(function() {
initializeRemotelyValidatingElementsWithAdditionalFields($("#myFormId"));
});
Ответ 2
То, как я работаю, - это добавить JavaScript.
$("#FirstName").change(function () {
$('#CardNumber').removeData('previousValue');
$('#CardNumber').valid();
});
Таким образом, при первом изменении имени вы удаляете любые предыдущие значения из номера карты и повторно проверяете номер карты.
Ответ 3
если вам не нравится создавать клиентские скрипты:
public class Customer
{
[Remote("CardExisting", "Validation", AdditionalFields = "CardNumber,LastName")]
public string FirstName { get; set; }
[Remote("CardExisting", "Validation", AdditionalFields = "FirstName,CardNumber")]
public string LastName { get; set; }
[Remote("CardExisting", "Validation", AdditionalFields = "FirstName,LastName")]
public string CardNumber { get; set; }
}
И подтвердите в CardExisting все поля заполнены или нет