You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Fluent Validation的编辑表单如何显示全部属性验证消息?

解决Fluent Validation属性多条验证消息仅显示第一条的问题

Blazor默认的ValidationMessage组件只会渲染目标属性的第一条验证消息,要显示所有消息可以通过以下两种方式实现:

1. 自定义通用验证消息组件

创建一个支持显示多条消息的自定义组件,可复用在多个表单中:

@typeparam TValue
@inject IValidationMessageStore ValidationMessageStore

@foreach (var message in ValidationMessageStore.GetValidationMessages(FieldIdentifier))
{
    <div class="text-danger">@message</div>
}

@code {
    [Parameter, Required] public Expression<Func<TValue>> For { get; set; }
    private FieldIdentifier FieldIdentifier => FieldIdentifier.Create(For);
}

使用时替换原有的ValidationMessage组件:

<ValidationMessages For="@(() => model.input)" />

2. 页面内直接遍历验证消息

如果不需要复用组件,可在当前页面直接获取并渲染所有消息:

@inject IValidationMessageStore ValidationMessageStore

@{
    var fieldIdentifier = FieldIdentifier.Create(() => model.input);
    var validationMessages = ValidationMessageStore.GetValidationMessages(fieldIdentifier);
}

@if (validationMessages.Any())
{
    foreach (var msg in validationMessages)
    {
        <div class="text-danger">@msg</div>
    }
}

额外注意

确保你的Fluent Validation规则确实为目标属性添加了多条验证逻辑,例如:

public class YourModelValidator : AbstractValidator<YourModel>
{
    public YourModelValidator()
    {
        RuleFor(m => m.input)
            .NotEmpty().WithMessage("输入项不能为空")
            .MinimumLength(5).WithMessage("输入长度不能少于5个字符")
            .MaximumLength(20).WithMessage("输入长度不能超过20个字符");
    }
}

内容的提问来源于stack exchange,提问作者blue pink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:34:54