Пользовательский метод проверки ненавязчивых адаптеров на стороне клиента, вызывающий Ajax - PullRequest
1 голос
/ 11 марта 2019

Не уверен, что я поступлю правильно.

Я пытаюсь проверить поле PersonalID на модели, соответствующей некоторым бизнес-правилам.

Метод бизнес-правила принимает PersonalID в виде строки и проходит через некоторые заранее определенные проверки и возвращает логическое значение.

Я создал атрибут PersonalIdValidationAttribute, который наследует атрибут ValidationAttribute и IClientValidatable. Метод IsValid вызывает бизнес-правило, чтобы определить, действительно ли PersonalID действителен.

Кажется, все это работает так, как задумано. Если я перехожу к проверке на стороне клиента, проверка модели на POSTing работает как положено.

Кажется, что GetClientValidationRules также работают. Вот код:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule()
        {
            // Test Error Message
            ErrorMessage = "An Error",
            ValidationType = "personalidvalidation"
        };

        yield return rule;
    }

Это также создает поле ввода с data-val, как я и ожидал:

<input class="input valid" data-val="true" data-val-length="Rajoitus 30 merkkiä" data-val-length-max="11" data-val-personalidvalidation="An Error" data-val-required="Henkilötunnus on pakollinen" id="PolicyHolder_PersonalID" name="PolicyHolder.PersonalID" type="text" value="">

Теперь я не уверен, разрешено ли мне это делать. В файле сценария я добавляю проверку на стороне клиента:

$.validator.addMethod("personalidvalidation", function (value, element, params) {
        var record = { personalID: value };
        return $.ajax({
            url: "PersonalIdValidation",
            data: JSON.stringify(record),
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (response) {
                if (response.success) {
                    console.log('success');
                    return true;
                } else {
                    console.log('fail');
                    return false;
                }
            },
            error: function () {
                return false;
            }
        });
    });

    $.validator.unobtrusive.adapters.add("personalidvalidation", function (options) {
        options.rules["personalidvalidation"] = options.params;
        options.messages["personalidvalidation"] = options.message;
    });

Просмотр вкладки Сеть в консоли разработчика показывает, что вызывается метод контроллера, но сообщение проверки никогда не отображается правильно. Сообщения об успехе и неудаче отображаются в консоли.

Как мне вызвать контроллер с бизнес-логикой для выполнения проверки на стороне клиента по PersonalID?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...