首页 > 解决方案 > Blazor:如何检查 OnFieldChanged 中的字段是否有效

问题描述

当用户更改特定字段并且字段值有效时,我想调用一个方法。

<EditForm EditContext="_editContext">
   <DataAnnotationValidator /> //could be FluentValidator or anything else
   <InputText @bind="Model.Username" />
</EditForm>
_editContext = new EditContext(Model);
_editContext.FieldChanged(o, e) => {
   if (e.FieldIdentifier.Name == "Username") {
       //how to check if field is valid
       //folowing does not work, because field has not been validated yet
       var hasSrrors = e.EditContext.GetValidationMessages(e.FieldIdentifier).Any();
   }
};

如何检查字段更改后是否有效?

我提供了 RX 解决方案,但它并不完美:

Model.EditContext.FieldChangedObservable()
    .Where(fieldIdenitfier => fieldIdenitfier.Name == "Username")
    //wait until validation
    .Select(_ => Model.EditContext.ValidationStateChangedObservable().FirstAsync())
    .Switch()
    //check barcode validation
    .Where(b => !Model!.EditContext.GetValidationMessages(FieldIdentifier.Create(() => Model.Entity.Barcode)).Any())
    .Subscribe(_ => MyFieldChanged());

标签: c#validationblazor

解决方案


推荐阅读