ARTICLE DETAIL

资讯详情

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

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

RuleSets 规则集全攻略:Blazored.FluentValidation 分组校验进阶指南 RuleSets 规则集全攻略Blazored.FluentValidation 分组校验进阶指南【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidationBlazored.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 OnValidSubmitSubmitValidForm FluentValidationValidator Options(options options.IncludeRuleSets(Names)) / ValidationSummary / p labelFirst name: /label InputText bind-Value_person.FirstName / /p button typesubmitSave/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()实现指定的组 公共规则一起执行灵活度非常高。规则集使用避坑指南默认规则不会自动执行放在RuleSet里的规则不指定规则集就不会跑。别指望定义了就生效。规则集内没有的字段不校验只校验Names规则集时Age、Email 等字段即使为空也不会报错这正是分组校验的预期行为。命名保持一致RuleSet(Names)与IncludeRuleSets(Names)中的字符串必须完全一致大小写敏感。异步校验别忘用 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),仅供参考
返回列表