在对话框中使用 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 不起作用