則集全攻略:Blazored.FluentValidation 分組校驗進(jìn)階指南)
RuleSets 規(guī)則集全攻略Blazored.FluentValidation 分組校驗進(jìn)階指南【免費下載鏈接】FluentValidationA library for using FluentValidation with Blazor項目地址: https://gitcode.com/gh_mirrors/flue/FluentValidationBlazored.FluentValidation 是一款把 FluentValidation 無縫接入 Blazor 表單的校驗庫而RuleSets 規(guī)則集正是它最強(qiáng)大的分組校驗特性。當(dāng)你面對多步驟表單、分區(qū)段編輯或按業(yè)務(wù)模塊校驗時規(guī)則集能讓你精準(zhǔn)控制校驗?zāi)男┮?guī)則避免每次提交都觸發(fā)全量校驗。本文將用最通俗的方式帶你從零掌握規(guī)則集的分組校驗配置方法。為什么需要分組校驗一次看懂規(guī)則集的價值普通表單校驗是全有或全無一提交所有字段的規(guī)則全部執(zhí)行。這在分步向?qū)А⒉莞灞4?、按模塊編輯的場景中非常別扭——用戶只填了第一步你卻把后面所有步驟的錯誤都彈出來。RuleSets 規(guī)則集的解決思路很簡單把校驗規(guī)則分組打包校驗時可以只執(zhí)行指定的一組規(guī)則。場景默認(rèn)校驗規(guī)則集分組校驗分步表單向?qū)б淮涡r炈胁襟E只校驗當(dāng)前步驟草稿保存強(qiáng)校驗失敗無法保存輕校驗僅查必填多模塊編輯全部字段統(tǒng)一校驗按模塊分別觸發(fā)性能敏感場景每次全量執(zhí)行只跑需要的規(guī)則第一步在驗證器中定義規(guī)則集規(guī)則集的分組動作發(fā)生在驗證器里使用 FluentValidation 的RuleSet方法即可。以項目測試中的 Model/Person.cs 為例public PersonValidator() { // 定義名為 Names 的規(guī)則集只包含姓名相關(guān)規(guī)則 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 等規(guī)則不在任何規(guī)則集中屬于默認(rèn)規(guī)則 RuleFor(p p.Age) .NotNull().WithMessage(AgeRequired) .GreaterThanOrEqualTo(0).WithMessage(AgeMin) .LessThan(150).WithMessage(AgeMax); }關(guān)鍵點放進(jìn)RuleSet的規(guī)則默認(rèn)校驗時不會執(zhí)行只有在校驗時顯式指定規(guī)則集它們才會生效。這正是分組校驗靈活性的來源。方法一通過 Options 參數(shù)配置規(guī)則集聲明式配置最直觀的規(guī)則集用法是在FluentValidationValidator組件上通過Options參數(shù)聲明要包含的規(guī)則集。這種方式適合組件固定只校驗?zāi)骋唤M規(guī)則的場景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規(guī)則集內(nèi)。相關(guān)實現(xiàn)可在 FluentValidationsValidator.cs 中看到Options參數(shù)的完整定義。方法二通過代碼手動校驗指定規(guī)則集編程式配置如果你的規(guī)則集選擇是動態(tài)的比如隨步驟變化更推薦通過代碼觸發(fā)校驗。先給組件加上ref再調(diào)用Validate方法并傳入規(guī)則集選項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 中的用法完全一致非常適合下一步按鈕只校驗當(dāng)前步驟的邏輯。進(jìn)階玩法如何同時校驗多個規(guī)則集業(yè)務(wù)復(fù)雜時一個規(guī)則集往往不夠。IncludeRuleSets支持傳入多個名稱一次校驗多組規(guī)則// 同時校驗 Names 和 Address 兩個規(guī)則集 validator.Validate(options { options.IncludeRuleSets(Names, Address); });如果你想校驗規(guī)則集 所有默認(rèn)規(guī)則還可以組合IncludeRulesNotInRuleSet()實現(xiàn)指定的組 公共規(guī)則一起執(zhí)行靈活度非常高。規(guī)則集使用避坑指南默認(rèn)規(guī)則不會自動執(zhí)行放在RuleSet里的規(guī)則不指定規(guī)則集就不會跑。別指望定義了就生效。規(guī)則集內(nèi)沒有的字段不校驗只校驗Names規(guī)則集時Age、Email 等字段即使為空也不會報錯這正是分組校驗的預(yù)期行為。命名保持一致RuleSet(Names)與IncludeRuleSets(Names)中的字符串必須完全一致大小寫敏感。異步校驗別忘用 Async規(guī)則中含異步校驗時請使用ValidateAsync可參考 FluentValidationsValidator.cs 的實現(xiàn)。總結(jié)RuleSets 規(guī)則集是 Blazored.FluentValidation 處理復(fù)雜表單的殺手锏聲明式Options適合固定分組編程式Validate(options)適合動態(tài)分組兩者配合即可覆蓋絕大多數(shù)分組校驗需求。項目完整示例與測試代碼位于 RuleSets/動手跑一遍測試Tests.cs你就能快速吃透這套分組校驗玩法。下次再做多步驟表單不妨試試規(guī)則集讓校驗邏輯清晰又高效。【免費下載鏈接】FluentValidationA library for using FluentValidation with Blazor項目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考