FluentValdiation & Blazor (Server-side), как обнулить кастомные ошибки?

Для обнуления кастомных ошибок в FluentValidation в Blazor Server Side, вам понадобится использовать провайдер валидации и изменять состояние ошибки вручную.

1. Начнем с создания класса, который будет представлять вашу модель данных. Вы также должны добавить атрибуты валидации FluentValidation к свойствам модели. Например, представим следующий класс:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

2. Создайте класс валидации, который наследуется от AbstractValidator, и определите правила валидации для свойств модели. Здесь вы можете добавить кастомные правила или сообщения об ошибках. Например:

public class PersonValidator : AbstractValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(person => person.FirstName)
            .NotEmpty().WithMessage("Имя является обязательным полем.")
            .Length(2, 50).WithMessage("Имя должно содержать от 2 до 50 символов.");
        
        RuleFor(person => person.LastName)
            .NotEmpty().WithMessage("Фамилия является обязательным полем.")
            .Length(2, 50).WithMessage("Фамилия должна содержать от 2 до 50 символов.");
    }
}

3. В вашем компоненте Blazor, вы должны внедрить провайдер валидации и модель данных, и установить валидацию на форму. Например:

@inject IValidationProvider Validator
@inject Person PersonModel

<EditForm Model="@PersonModel" OnValidSubmit="HandleSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <div>
        <label for="firstName">Имя:</label>
        <InputText id="firstName" @bind-Value="@PersonModel.FirstName" />
        <ValidationMessage For="@(() => PersonModel.FirstName)" />
    </div>

    <div>
        <label for="lastName">Фамилия:</label>
        <InputText id="lastName" @bind-Value="@PersonModel.LastName" />
        <ValidationMessage For="@(() => PersonModel.LastName)" />
    </div>
    
    <button type="submit">Отправить</button>
</EditForm>

@code {
    private async Task HandleSubmit()
    {
        if (Validator.Validate<Person>(PersonModel))
        {
            // Напишите код здесь для обработки действий после успешной валидации
        }
    }
}

4. Чтобы обнулить кастомные ошибки, вы должны получить доступ к состоянию ошибки в провайдере валидации и изменить его значение на null. Вы можете сделать это вручную, вызвав метод ClearErrors провайдера валидации. Например:

@inject IValidationProvider Validator
@inject Person PersonModel

@code {
    // ... код предыдущего компонента Blazor здесь ...

    private async Task HandleSubmit()
    {
        if (Validator.Validate<Person>(PersonModel))
        {
            // Напишите код здесь для обработки действий после успешной валидации

            // Обнуление кастомных ошибок
            Validator.ClearErrors<Person>(PersonModel);
        }
    }
}

После вызова Validator.ClearErrors<Person>(PersonModel) кастомные ошибки будут обнулены и не будут отображаться в интерфейсе пользователя.

Надеюсь, эта информация поможет вам с использованием FluentValidation в Blazor Server Side и обнулении кастомных ошибок.