Подтвердить что ты не робот

Проверка нескольких полей с помощью 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?

4b9b3361

Ответ 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 все поля заполнены или нет