Blazor EditForm с пользовательским беглым валидатором, удаляйте правило при обновлении - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть собственный валидатор

RuleFor(d => d.Id).NotEmpty()
            .Matches("^[0-9]*$")
            .WithMessage("Id must consist of number!")
            .MustAsync(async (id, token) =>
            {
                // make http request

                if (someCase)
                {
                    return false;
                }

                return true;
            }).WithMessage("Some error");

И я использую его в EditForm как

<FluentValidationValidator ValidatorType=typeof(MyValidator) />

, отключая кнопку

EditContext = new EditContext(MyModel);
EditContext.OnFieldChanged += async (sender, e) =>
{
   IsInvalidForm = !(await Validator.ValidateAsync(MyModel)).IsValid;
   StateHasChanged();
};

Пока все хорошо, все работает , но при обновлении (используя тот же компонент Razor) поле Id отключено , и если я изменяю какую-либо другую часть значения валидатора, оно также проверяет Id и возвращает IsValid false ( потому что он уже существует). Как я могу это исправить?

1 Ответ

0 голосов
/ 07 апреля 2020

Добавление состояния в ваш валидатор должно работать

private bool _isValid;
RuleFor(d => d.Id).NotEmpty()
            .Matches("^[0-9]*$")
            .WithMessage("Id must consist of number!")
            .MustAsync(async (id, token) =>
            {
                if (_isValid)
                {
                   return true;
                }
                // make http request

                if (someCase)
                {
                    return false;
                }

                _isValid = true;
                return true;
            }).WithMessage("Some error");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...