You need to enable JavaScript to run this app. MudBlazor弹窗内EditForm结合FluentValidation验证未阻止提交问题
优惠活动
大模型
产品
解决方案
定价
更多

MudBlazor弹窗内EditForm结合FluentValidation验证未阻止提交问题

解决方案

你当前的问题核心是点击提交按钮时未触发EditForm的校验逻辑就直接关闭了弹窗,可通过以下两种方案修改:


方案1:使用EditForm自带的提交校验逻辑(推荐)

直接复用EditForm内置的校验触发逻辑,只有校验通过才会执行提交操作,改动最小:

修改BookDialog.razor代码

<MudDialog>
    <DialogContent>
        <!-- 新增OnValidSubmit事件绑定,校验通过后才会触发Submit方法 -->
        <EditForm Model="@model" OnValidSubmit="Submit">
        <FluentValidationValidator />
        <MudTextField Label="@L[\"Code\"]" @bind-Value="model.Code" For="() => model.Code" />
        <MudTextField Label="@L[\"Title\"]" @bind-Value="model.Title" For="() => model.Title" />
        </EditForm>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="Cancel">Cancel</MudButton>
        <!-- 把按钮类型改为Submit,去掉原来的OnClick绑定,点击后会自动触发EditForm的提交流程 -->
        <MudButton Color="MudBlazor.Color.Primary" ButtonType="ButtonType.Submit">Ok</MudButton>
    </DialogActions>
</MudDialog>
@code{
    [Parameter]
    public BookInfo model { get; set; }
    [CascadingParameter] MudDialogInstance MudDialog { get; set; }
    private void Cancel()
    {
        MudDialog.Cancel();
    }
    // 只有校验通过后才会进入该方法
    private void Submit()
    {
        MudDialog.Close(DialogResult.Ok<BookInfo>(model));
    }
}

方案2:手动触发校验判断

如果需要保留按钮的OnClick绑定逻辑,可手动调用校验方法判断结果后再决定是否关闭弹窗:

修改BookDialog.razor代码

<MudDialog>
    <DialogContent>
        <!-- 新增EditForm实例引用 -->
        <EditForm Model="@model" @ref="editFormRef">
        <FluentValidationValidator />
        <MudTextField Label="@L[\"Code\"]" @bind-Value="model.Code" For="() => model.Code" />
        <MudTextField Label="@L[\"Title\"]" @bind-Value="model.Title" For="() => model.Title" />
        </EditForm>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="Cancel">Cancel</MudButton>
        <MudButton Color="MudBlazor.Color.Primary" OnClick="Submit">Ok</MudButton>
    </DialogActions>
</MudDialog>
@code{
    [Parameter]
    public BookInfo model { get; set; }
    [CascadingParameter] MudDialogInstance MudDialog { get; set; }
    // 声明EditForm引用字段
    private EditForm editFormRef;
    
    private void Cancel()
    {
        MudDialog.Cancel();
    }
    private void Submit()
    {
        // 手动触发校验,校验通过才关闭弹窗
        if(editFormRef.Validate())
        {
            MudDialog.Close(DialogResult.Ok<BookInfo>(model));
        }
    }
}

补充说明

你当前校验提示可以正常显示,说明FluentValidation的注册和Validator配置已经正确,无需修改BookValidator.cs和其他注入逻辑。另外Index.razor中的dialogParameters首字母需要大写为DialogParameters,否则会编译报错。

内容的提问来源于stack exchange,提问作者Moslem Aslani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 18:15:00