
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),僅供參考