使用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
相关产品推荐
相关产品推荐

