ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何拿到完整校验失败信息?Blazored.FluentValidation 的 GetFailuresFromLastValidation 高级用法

如何拿到完整校验失败信息?Blazored.FluentValidation 的 GetFailuresFromLastValidation 高级用法 如何拿到完整校验失败信息Blazored.FluentValidation 的 GetFailuresFromLastValidation 高级用法【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation在 Blazor 表单开发中Blazored.FluentValidation是最常用的校验库之一它能让 FluentValidation 的校验规则与EditForm无缝协作。不过很多新手会发现默认的校验提示只能拿到一段错误文案而完整校验失败信息——比如严重级别Severity、出错的具体值、错误码等——却总是拿不到。本文就带你掌握FluentValidationValidator组件上的GetFailuresFromLastValidation高级用法一次调用拿到所有校验失败详情让表单校验体验再上一个台阶。为什么默认校验信息不够用Blazor 的ValidationMessageStore只会保留每个字段的错误消息字符串用于渲染ValidationMessage和ValidationSummary。而 FluentValidation 返回的ValidationFailure对象里其实藏着比文案丰富得多的信息对比项默认校验消息GetFailuresFromLastValidation错误文案 ErrorMessage✅ 有✅ 有严重级别 Severity❌ 丢失✅ 有出错时的值 AttemptedValue❌ 丢失✅ 有错误码 ErrorCode❌ 丢失✅ 有自定义状态 CustomState❌ 丢失✅ 有如果你想做警告级别不阻断提交按错误码做国际化这类功能就必须拿到完整的ValidationFailure对象这正是本文主角存在的意义。GetFailuresFromLastValidation 方法签名与返回值解析 这个方法定义在FluentValidationValidator组件上源码位于src/Blazored.FluentValidation/FluentValidationsValidator.cs核心逻辑非常清晰不传参数返回最近一次整表校验的全部ValidationFailure数组传入FieldIdentifier只返回指定字段的校验失败没有任何失败时返回空数组不会返回 null可以放心使用。它内部依赖的LastValidationResult是一个DictionaryFieldIdentifier, ListValidationFailure在每次整表校验时被重建把 FluentValidation 返回的错误按字段归类存放。给 FluentValidationValidator 添加 ref 引用的最快配置方法想调用组件上的方法第一步是在EditForm里给组件加上ref引用代码非常简单EditForm Model_person OnSubmitSubmit FluentValidationValidator ref_fluentValidationValidator / ValidationSummary / ... /EditForm code { private Person _person new(); private FluentValidationValidator? _fluentValidationValidator; private void Submit() { ... } }不传参数一次获取全部校验失败详情在提交按钮的处理逻辑里先触发校验再调用GetFailuresFromLastValidation()就能拿到本次校验的全量失败信息protected void Submit() { _fluentValidationValidator!.Validate(); var lastResult _fluentValidationValidator.GetFailuresFromLastValidation(); foreach (var failure in lastResult) { Console.WriteLine($字段: {failure.PropertyName}); Console.WriteLine($信息: {failure.ErrorMessage}); Console.WriteLine($级别: {failure.Severity}); } }传 FieldIdentifier按字段精准获取校验失败信息当页面字段很多时你往往只关心某个特定字段的失败详情。此时传入FieldIdentifier即可按需获取var nameField new FieldIdentifier(_person, nameof(Person.Name)); var nameFailures _fluentValidationValidator.GetFailuresFromLastValidation(nameField); if (nameFailures.Any(f f.Severity Severity.Error)) { // 针对 Name 字段做特殊处理 }FieldIdentifier是 Blazor 表单系统的字段身份证用new FieldIdentifier(实例, 属性名)就能构造和InputText内部用的是同一套机制。高级实战根据 Severity 等级区分错误与警告 ⚠️这是该 API 最有代表性的用法给表单控件动态加上不同的 CSS 类实现错误红、警告黄的视觉反馈。核心代码就一段code { private string GetValidationClass() { var lastResult _fluentValidationValidator?.GetFailuresFromLastValidation(); if (lastResult is null || !lastResult.Any()) { return valid; } if (lastResult.Any(failure failure.Severity Severity.Error)) { return invalid; } return warning; } }这个思路在项目的测试里也有完整演示tests/Blazered.FluentValidation.Tests/FullFailureAccess/目录下的SyncComponent.razor和AsyncComponent.razor分别展示了同步与异步校验下如何通过Severity判断结果类型。比如给某个规则设置.WithSeverity(Severity.Warning)当年龄为 69 时校验失败但属于警告级别用上面的代码就能正确归类为warning。✅使用 GetFailuresFromLastValidation 的 3 个注意事项结果只反映最近一次整表校验字段级校验如输入框失焦触发不会刷新LastValidationResult只有提交时的整表校验会更新它。所以请在Validate()/ValidateAsync()之后立刻读取时机很重要同步异步都支持Validate()与ValidateAsync()之后调用该方法均可异步场景记得await校验完成再读取空结果请放心处理返回的是空数组而非 null直接用Any()判断即可无需判空防御。总结GetFailuresFromLastValidation是 Blazored.FluentValidation 里被低估的宝藏方法它把被ValidationMessageStore丢弃的ValidationFailure完整信息重新交还给你——无论是按Severity做分级提示、按ErrorCode做错误码映射还是读取AttemptedValue辅助用户纠错都能轻松实现。赶快在你的 Blazor 表单里加上ref引用把这份完整校验失败信息用起来吧【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表