Blazor EditForm и свободная проверка - PullRequest
3 голосов
/ 14 апреля 2020

Просто собрать оболочку на основе EditForm и использовать Fluent Validation. Я создал два свойства в этой форме, как показано ниже:

if (ModelValidation)
{
    editContext.OnValidationRequested +=
        (sender, eventArgs) => ValidateModel((EditContext)sender, messages);
}

if (FieldValidation)
{
    editContext.OnFieldChanged +=
        (sender, eventArgs) => ValidateField(editContext, messages, eventArgs.FieldIdentifier);
}

Это позволяет выполнять проверку либо на OnFieldChanged (изменение значений, проверяется в поле выхода), либо при нажатии кнопки отправки (OnValidationRequested)

Однако, если я скажу текстовое поле, которое является пустой (которое должно быть непустым), вкладка из него не запускается обработчиком OnFieldChanged () ... (не удивительно, что поле не изменилось). Есть ли способ заставить вызов OnFieldChanged () или обработчик фокуса уничтожения, не прибегая к javascript?

1 Ответ

1 голос
/ 16 апреля 2020

Я подумал, что это было интересно, поэтому я взглянул на исходный код класса InputText Blazor на ASP. NET Базовый проект GitHub здесь:

https://github.com/dotnet/aspnetcore/blob/master/src/Components/Web/src/Forms/InputText.cs

Вы заметите, что существует только один обработчик событий, и он относится к событию onchange, вызываемому браузером, когда пользователь изменяет значение в текстовом поле.

builder.AddAttribute(4, "onchange", EventCallback.Factory.CreateBinder<string>(this, __value => CurrentValueAsString = __value, CurrentValueAsString));

Событие, на которое вы хотите подписаться, - onblur, которое возникает, когда пользователь щелкает или вкладывает вне поля независимо от того, изменили ли они его или нет, и это не было сделано.

Я не мог его нет нигде в InputText или InputBase (из которого происходит InputText), но он где-то есть, потому что, кажется, это работает:

@page "/"
<InputText @onblur="DoSomething" />

@code
{
    private void DoSomething()
    { // Your logic here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...