当前位置: 首页 > news >正文

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),仅供参考

http://www.cnnetsun.cn/news/4140384.html

相关文章:

  • 5分钟完成鼠标性能测试:MouseTester 快速上手指南
  • 3分钟快速上手:用Ollama运行Huihui-Qwen3.8-27B-abliterated-GGUF无审查模型的免费教程
  • 开源项目UI变更PR为何要求演示视频?从代码到体验的沟通范式升级
  • DoorDash面试攻略:系统设计、行为面试与编码考核解析
  • QueryExcel:三步查完100个Excel文件,定位到具体行列
  • 将Ring-Buffer移植到STM32:嵌入式MCU集成指南与3大避坑要点
  • 数学建模实战指南:从问题定义到模型部署的全流程解析
  • 零代码开发实战:不懂编程,也能快速搭建企业管理系统
  • Luminus-template 自动生成 API 文档:Swagger 集成完整教程
  • 嵌入式开发板选型指南:从需求分析到实战避坑
  • 3 步搭起 24 小时多平台直播自动录制环境
  • DeepSeek Harness:智能体状态管理的核心原理与工程实践
  • SpringBoot简历分析与面试系统设计与实现
  • DLSS Swapper 上手指南:游戏升帧换库一键搞定
  • 从零掌握After Effects UI动效:核心技能、实战案例与高效交付指南
  • 揭秘 MULLS 的 4 个鲁棒性技巧:地面分割、运动补偿、动态物体移除与距离反比采样
  • NATS.Net JetStream入门:5步创建Stream与Consumer实现消息持久化
  • 一个软件免费聚合全网音乐:LX Music桌面版真实使用体验与3分钟上手指南
  • VCTRenderer 动态体素化实战:flag volume 如何实现场景每帧实时更新
  • 免费的抖音无水印视频下载工具:粘贴链接,视频、主页、直播全都能存下
  • Windows 更新反复失败?WUReset 一键重置修复指南
  • PLC直线插补
  • Scroll Reverser 使用指南:轻量滚动方向控制
  • 【x264编码器】章节6——x264的变换量化
  • 解释一下Web服务器和应用服务器的区别。
  • AI 智能空气消毒净化器高效能 MOSFET 完整选型方案
  • 《经济研究》投稿 LaTeX 模板 Chinese-ERJ:从零配置到一次编译通过
  • WinUtil 完整指南:一键搞定软件安装、系统优化与故障修复,新电脑 30 分钟配好
  • Whoosh排序与分组技巧:搜索结果排序的7个进阶方案
  • pyqt鸟瞰