news 2026/8/21 18:59:31

RuleSets 规则集全攻略:Blazored.FluentValidation 分组校验进阶指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RuleSets 规则集全攻略:Blazored.FluentValidation 分组校验进阶指南

RuleSets 规则集全攻略:Blazored.FluentValidation 分组校验进阶指南

【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation

Blazored.FluentValidation 是一款把 FluentValidation 无缝接入 Blazor 表单的校验库,而RuleSets 规则集正是它最强大的分组校验特性。当你面对多步骤表单、分区段编辑或按业务模块校验时,规则集能让你精准控制"校验哪些规则",避免每次提交都触发全量校验。本文将用最通俗的方式,带你从零掌握规则集的分组校验配置方法。

为什么需要分组校验?一次看懂规则集的价值

普通表单校验是"全有或全无":一提交,所有字段的规则全部执行。这在分步向导、草稿保存、按模块编辑的场景中非常别扭——用户只填了第一步,你却把后面所有步骤的错误都弹出来。

RuleSets 规则集的解决思路很简单:把校验规则"分组打包",校验时可以只执行指定的一组规则。

场景默认校验规则集分组校验
分步表单(向导)一次校验所有步骤只校验当前步骤
草稿保存强校验,失败无法保存轻校验,仅查必填
多模块编辑全部字段统一校验按模块分别触发
性能敏感场景每次全量执行只跑需要的规则

第一步:在验证器中定义规则集

规则集的"分组"动作发生在验证器里,使用 FluentValidation 的RuleSet方法即可。以项目测试中的 Model/Person.cs 为例:

public PersonValidator() { // 定义名为 "Names" 的规则集,只包含姓名相关规则 RuleSet("Names", () => { RuleFor(p => p.FirstName) .NotEmpty().WithMessage(FirstNameRequired) .MaximumLength(50).WithMessage(FirstNameMaxLength); RuleFor(p => p.LastName) .NotEmpty().WithMessage(LastNameRequired) .MaximumLength(50).WithMessage(LastNameMaxLength); }); // 以下 Age、Email 等规则不在任何规则集中,属于"默认规则" RuleFor(p => p.Age) .NotNull().WithMessage(AgeRequired) .GreaterThanOrEqualTo(0).WithMessage(AgeMin) .LessThan(150).WithMessage(AgeMax); }

关键点:放进RuleSet的规则,默认校验时不会执行;只有在校验时显式指定规则集,它们才会生效。这正是分组校验灵活性的来源。

方法一:通过 Options 参数配置规则集(声明式配置)

最直观的规则集用法,是在<FluentValidationValidator>组件上通过Options参数声明要包含的规则集。这种方式适合"组件固定只校验某一组规则"的场景:

<EditForm Model="@_person" OnValidSubmit="@SubmitValidForm"> <FluentValidationValidator Options="@(options => options.IncludeRuleSets("Names"))" /> <ValidationSummary /> <p> <label>First name: </label> <InputText @bind-Value="@_person.FirstName" /> </p> <button type="submit">Save</button> </EditForm>

声明之后,该表单的所有校验(包括字段级校验)都会自动限定在Names规则集内。相关实现可在 FluentValidationsValidator.cs 中看到Options参数的完整定义。

方法二:通过代码手动校验指定规则集(编程式配置)

如果你的规则集选择是动态的(比如随步骤变化),更推荐通过代码触发校验。先给组件加上@ref,再调用Validate方法并传入规则集选项:

<FluentValidationValidator @ref="_fluentValidationValidator" /> <ValidationSummary /> @code { private FluentValidationValidator? _fluentValidationValidator; private Person _person = new(); private void ValidateNamesOnly() => _fluentValidationValidator?.Validate(options => options.IncludeRuleSets("Names")); }

异步场景同样支持,换成ValidateAsync即可。这种方式与 RuleSets/Component.razor 中的用法完全一致,非常适合"下一步"按钮只校验当前步骤的逻辑。

进阶玩法:如何同时校验多个规则集

业务复杂时,一个规则集往往不够。IncludeRuleSets支持传入多个名称,一次校验多组规则:

// 同时校验 "Names" 和 "Address" 两个规则集 validator.Validate(options => { options.IncludeRuleSets("Names", "Address"); });

如果你想"校验规则集 + 所有默认规则",还可以组合IncludeRulesNotInRuleSet(),实现"指定的组 + 公共规则"一起执行,灵活度非常高。

规则集使用避坑指南

  1. 默认规则不会自动执行:放在RuleSet里的规则,不指定规则集就不会跑。别指望"定义了就生效"。
  2. 规则集内没有的字段不校验:只校验Names规则集时,Age、Email 等字段即使为空也不会报错,这正是分组校验的预期行为。
  3. 命名保持一致RuleSet("Names")IncludeRuleSets("Names")中的字符串必须完全一致,大小写敏感。
  4. 异步校验别忘用 Async:规则中含异步校验时,请使用ValidateAsync,可参考 FluentValidationsValidator.cs 的实现。

总结

RuleSets 规则集是 Blazored.FluentValidation 处理复杂表单的"杀手锏":声明式Options适合固定分组,编程式Validate(options)适合动态分组,两者配合即可覆盖绝大多数分组校验需求。项目完整示例与测试代码位于 RuleSets/,动手跑一遍测试(Tests.cs),你就能快速吃透这套分组校验玩法。下次再做多步骤表单,不妨试试规则集,让校验逻辑清晰又高效。

【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 18:57:37

5分钟完成鼠标性能测试:MouseTester 快速上手指南

5分钟完成鼠标性能测试&#xff1a;MouseTester 快速上手指南 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester MouseTester 是一个免费开源的鼠标性能测试工具&#xff0c;直接抓取原始输入数据&#xff0c;把移动精度、点击响…

作者头像 李华
网站建设 2026/8/21 18:56:19

开源项目UI变更PR为何要求演示视频?从代码到体验的沟通范式升级

你刚提交了一个 UI 变更的 PR&#xff0c;代码写得漂亮&#xff0c;逻辑清晰&#xff0c;自测也通过了。你满怀期待地等待合并&#xff0c;却收到了一条来自项目维护者的评论&#xff1a;“请补充一个演示视频。” 那一刻&#xff0c;你可能会有点懵。代码不是最好的说明吗&am…

作者头像 李华
网站建设 2026/8/21 18:55:44

DoorDash面试攻略:系统设计、行为面试与编码考核解析

1. 项目概述&#xff1a;DoorDash面试的现状与挑战 DoorDash作为北美增长最快的食品配送平台之一&#xff0c;其26NG&#xff08;2026 New Grad&#xff09;岗位的面试竞争激烈程度逐年攀升。最近半年内&#xff0c;平台收到的应届生申请量同比增长了40%&#xff0c;而通过率却…

作者头像 李华
网站建设 2026/8/21 18:55:26

QueryExcel:三步查完100个Excel文件,定位到具体行列

QueryExcel&#xff1a;三步查完100个Excel文件&#xff0c;定位到具体行列 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel QueryExcel 是一款免费开源的 Excel 批量查询工具&#xff1a;输入若干关键…

作者头像 李华
网站建设 2026/8/21 18:55:17

将Ring-Buffer移植到STM32:嵌入式MCU集成指南与3大避坑要点

将Ring-Buffer移植到STM32&#xff1a;嵌入式MCU集成指南与3大避坑要点 【免费下载链接】Ring-Buffer A simple ring buffer (circular buffer) designed for embedded systems. 项目地址: https://gitcode.com/gh_mirrors/rin/Ring-Buffer 在嵌入式开发中&#xff0c;环…

作者头像 李华