在对话框中使用 FluentValidation 和 MudBlazor 进行表单验证

Posted

技术标签:

【中文标题】在对话框中使用 FluentValidation 和 MudBlazor 进行表单验证【英文标题】:form validation with FluentValidation and MudBlazor in dialog 【发布时间】:2021-10-22 13:19:53 【问题描述】:

我正在使用 MudBlazor,我想要在对话框中使用 fluentvalidation (EditForm) 的验证表单。

BookDialog.razor

<MudDialog>
    <DialogContent>
        <EditForm Model="@model">
        <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; 
    private void Cancel()
    
        MudDialog.Cancel();
    
    private void Submit()
    
        MudDialog.Close(DialogResult.Ok<BookInfo>(model));
    

Index.razor

@inject IDialogService dialogService

 <MudIconButton Icon="@Icons.Material.Filled.Add" OnClick="CreateBook"></MudIconButton>

@code
 private async Task CreateBook()
    
        var parameters = new dialogParameters();
        parameters.Add("model", new BookInfo());
        var dialog = await dialogService.Show<BookDialog>("Create A Book", parameters).Result;

        if (dialog.Data != null)
        
           //....
        
   

BookValidator.cs

 public class BookValidator : AbstractValidator<BookInfo>
    
        public BookValidator()
        
            CascadeMode = CascadeMode.Stop;
            RuleFor(x => x.Code).NotEmpty().WithMessage("*");
            RuleFor(x => x.Title).NotEmpty().WithMessage("*");
        
    

错误消息正确显示,但关闭对话框并且不停止表单提交。

【问题讨论】:

【参考方案1】:

我通过直接验证模型找到了解决方案。

private void Submit()
    
        var validator = new BookValidator();
        var result = validator.Validate(model);
        if (result.IsValid)
        
            MudDialog.Close(DialogResult.Ok<BookInfo>(model));
        
    

【讨论】:

以上是关于在对话框中使用 FluentValidation 和 MudBlazor 进行表单验证的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET Core 中使用 FluentValidation 和依赖注入

使用 FluentValidation 如何在控制器中使用 validationContext 进行测试

使用 FluentValidation 在一条规则中进行多重验证

使用 WebApi [Route] 属性时 FluentValidation 不起作用

在 .NET 中使用 FluentValidation 进行参数验证

.NET6之MiniAPI(二十):实体验证FluentValidation