使用 MudBlazor 和 FluentValidation 更改其他字段时触发字段验证

问题描述 投票:0回答:1

我有一个带有两个开关的表格,我想确保至少有一个开关处于打开状态。如果该条件适用,我还希望验证错误消息从任何开关中消失,也就是说,如果另一个开关更新为 ON。

目前我只设法让开关独立验证,如本例所示https://try.mudblazor.com/snippet/wOQxkxmuxEyoZIVg

当其中任何一个发生更改时,如何强制验证两个开关(并更新它们的错误消息)?

我也尝试过使用这个建议(为 EditForm 而不是 MudForm 制作)触发相关属性的验证(FluentValidation)没有成功。

fluentvalidation mudblazor
1个回答
0
投票

您可以在两个开关中的任何一个发生变化时触发验证,方法是使用

CheckChanged
EventCallback docs.

  • 为每个
    MudSwitch<bool>
    添加@ref并创建它们的字段。
  • 将 @bind-Checked 替换为
    Changed
    属性(因为这也使用了 EventCallback)。
<MudForm Model="@model" @ref="@form" Validation="@(model.ValidateModel)">
    <MudSwitch @ref="switchC" Checked="@model.IsC" For="@(() => model.IsC)" Color="Color.Primary" CheckedChanged="@(async (bool e) => { model.IsC = e; await ValidateSwitches(); })">C</MudSwitch>
    <MudSwitch @ref="switchS" Checked="@model.IsS" For="@(() => model.IsS)" Color="Color.Primary" CheckedChanged="@(async (bool e) => { model.IsS = e; await ValidateSwitches(); })">S</MudSwitch>
</MudForm>
@code 
{

    MudSwitch<bool> switchC;
    MudSwitch<bool> switchS;
    private async Task ValidateSwitches()
    {
        await switchC.Validate();
        await switchS.Validate();
    }
}

现在开关将在切换时运行您自己的验证逻辑,并且它们也会在验证表单时进行验证。

MudBlazor 片段

© www.soinside.com 2019 - 2024. All rights reserved.