5分钟快速上手 Blazored.FluentValidation:Blazor 表单校验入门教程
5分钟快速上手 Blazored.FluentValidation:Blazor 表单校验入门教程
【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation
Blazor 表单校验是 Web 开发中绕不开的一环,而Blazored.FluentValidation正是把强大的 FluentValidation 校验库无缝接入 Blazor 的最佳方案。本教程面向新手,带你 5 分钟搞定 Blazor 表单校验入门:从安装、注册到写第一个校验器,全程附可直接复制的示例代码,看完即可上手。
为什么 Blazor 表单校验要用 FluentValidation?
原生 Blazor 的DataAnnotations校验虽然开箱即用,但遇到复杂业务规则(异步校验、条件校验、组合校验)时就显得力不从心。FluentValidation 作为 .NET 生态最流行的校验库,用链式 API 让规则声明一目了然,而 Blazored.FluentValidation 则把它包装成 Blazor 组件,与EditForm深度集成。
核心优势一览:
| 能力 | 说明 |
|---|---|
| 🚀 链式语法 | RuleFor(x => x.Age).NotNull().LessThan(150)一行搞定多条规则 |
| ⏱ 异步校验 | 原生支持MustAsync,轻松校验邮箱唯一性等场景 |
| 🎯 按需校验 | 支持 RuleSet 分组,只校验"姓名"或只校验"年龄" |
| 🔍 自动发现 | 自动扫描程序集寻找校验器,也可指定从依赖注入容器获取 |
| 🧩 深度集成 | 与EditForm、ValidationMessage、ValidationSummary无缝配合 |
一分钟安装:NuGet 引入 Blazored.FluentValidation
在你的 Blazor 项目(Blazor Server 或 WebAssembly 均可,支持 .NET 6/7/8)中执行:
dotnet add package Blazored.FluentValidation然后在根目录的_Imports.razor中加入命名空间,所有组件即可直接使用:
@using Blazored.FluentValidation最快配置方法:两步完成校验器注册
第一步:定义模型和校验器
先创建一个数据模型(如用户注册信息),再为它编写校验器,规则集中管理、非常直观:
public class PersonValidator : AbstractValidator<Person> { public PersonValidator() { RuleFor(p => p.FirstName).NotEmpty().MaximumLength(50); RuleFor(p => p.Age) .NotNull() .GreaterThanOrEqualTo(0) .LessThan(150); RuleFor(p => p.EmailAddress) .NotEmpty() .EmailAddress() .MustAsync(IsUniqueAsync); // 异步校验 } }示例模型与完整校验器可参考 samples/Shared/SharedModels/Person.cs。
第二步:注册到依赖注入容器
在Program.cs中注册校验器(Blazor Server 写法示例见 samples/BlazorServer/Program.cs):
builder.Services.AddTransient<IValidator<Person>, PersonValidator>();核心集成步骤:在 EditForm 中启用校验
在页面中放入<FluentValidationValidator />组件,并用InputText、InputNumber等绑定字段,即可获得即时反馈:
<EditForm Model="@_person" OnValidSubmit="SubmitForm"> <FluentValidationValidator /> <ValidationSummary /> <label>姓名</label> <InputText @bind-Value="_person.FirstName" /> <ValidationMessage For="@(() => _person.FirstName)" /> <label>年龄</label> <InputNumber @bind-Value="_person.Age" /> <ValidationMessage For="@(() => _person.Age)" /> <button type="submit">保存</button> </EditForm>组件内部通过EditContextFluentValidationExtensions监听字段变更与表单提交事件,自动完成校验并把错误信息映射到对应字段,你几乎不用写任何触发逻辑。完整组件代码见 src/Blazored.FluentValidation/FluentValidationsValidator.cs。
常用进阶玩法:异步校验与分组校验
处理异步校验
如果校验规则包含数据库查询等异步操作,给组件加@ref引用,在提交时手动调用ValidateAsync即可(示例见 tests/Blazored.FluentValidation.Tests/DirectValidation):
<FluentValidationValidator @ref="_validator" /> @code { private FluentValidationValidator? _validator; private async Task SubmitFormAsync() { if (await _validator!.ValidateAsync()) { // 校验通过,继续提交 } } }按 RuleSet 分组校验
业务上常有"注册第一步只校验姓名"这类需求,可用Options参数指定要执行的规则组:
<FluentValidationValidator Options="@(options => options.IncludeRuleSets("Names"))" />分组校验的完整演示见 tests/Blazored.FluentValidation.Tests/RuleSets。
常见问题速查:诊断与解决方案
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| 校验完全不生效 | 校验器未注册到 DI | 确认Program.cs中已AddTransient对应IValidator<T> |
| 组件报缺少 EditContext 错误 | 组件放在了EditForm之外 | 必须包裹在<EditForm>内使用 |
| 校验器自动扫描过慢 | 扫描了全部程序集 | 显式传入Validator参数或设DisableAssemblyScanning="true" |
| 想查看错误严重级别等细节 | 默认只取错误消息 | 调用GetFailuresFromLastValidation()获取完整ValidationFailure |
结语
至此,Blazor 表单校验的完整流程你已经掌握:安装 → 注册 → 写校验器 → 放入 EditForm,全程不到 5 分钟。想查看各功能的完整示例代码,可以直接克隆仓库到本地运行体验:
git clone https://gitcode.com/gh_mirrors/flue/FluentValidation项目自带的 Blazor Server 与 WebAssembly 示例分别演示了依赖注入与程序集扫描两种校验器加载方式(见 samples/BlazorServer 与 samples/BlazorWebAssembly)。现在就动手,让你的 Blazor 表单校验既优雅又强大吧!🎉
【免费下载链接】FluentValidationA library for using FluentValidation with Blazor项目地址: https://gitcode.com/gh_mirrors/flue/FluentValidation
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
