Blazor 表单验证 DataAnnotations 使用方法
发布时间 - 2025-12-26 00:00:00 点击率:次Blazor表单验证使用DataAnnotations特性(如[Required]、[EmailAddress])声明规则,配合EditForm、DataAnnotationsValidator及ValidationMessage组件实现自动校验;需注入EditContext调用Validate()手动触发,并支持自定义验证特性。
Blazor 表单验证用 DataAnnotations 很直接,核心是给模型属性加特性(如 [Required]、[EmailAddress]),再配合 EditForm 和 ValidationSummary/ValidationMessage 组件自动触发校验。
模型上标注验证规则
在 C# 模型类中,用 System.ComponentModel.DataAnnotations 命名空间下的特性声明约束:
-
[Required]:字段必填(空字符串或 null 都不通过) -
[StringLength(50, MinimumLength = 2)]:限制长度范围 -
[EmailAddress]:基础邮箱格式检查(正则匹配,不发邮件验证) -
[Range(18, 120)]:数值范围(支持 int、double 等) -
[RegularExpression(@"^\d{3}-\d{2}-\d{4}$")]:自定义正则(如社保号格式)
注意:这些特性只影响客户端显示逻辑和基础服务端验证,不替代后端业务校验。
在 EditForm 中启用验证
把模型绑定到 EditForm,它会自动监听输入变化并触发 DataAnnotationsValidator:
DataAnnotationsValidator是关键组件,没有它,特性不会生效;ValidationMessage的For参数必须是表达式(@(() => ...)),不能写字符串或变量。手动触发表单验证
默认只在提交或失去焦点时校验。如需主动校验(比如点击“下一步”但不提交),可注入
EditContext:
- 在组件中定义
private EditContext? editContext;- 在
EditForm上添加@ref="editContext"- 调用
editContext?.Validate()即可立即运行所有规则校验结果会更新 UI,
ValidationSummary和各ValidationMessage也会同步刷新。自定义验证特性(可选进阶)
内置特性不够用时,
可继承
ValidationAttribute写自己的规则:public class FutureDateAttribute : ValidationAttribute { protected override ValidationResult? IsValid(object? value, ValidationContext validationContext) { if (value is DateTime date && date < DateTime.Today) return new ValidationResult("日期不能早于今天"); return ValidationResult.Success; } }然后像其他特性一样加到属性上:
[FutureDate]。服务端同样生效,Blazor WebAssembly 也支持(因代码 AOT 编译后仍可执行)。基本上就这些。DataAnnotations 验证轻量、声明式、前后端复用,适合大多数场景。注意别依赖它做复杂业务判断(比如“用户名是否已存在”得靠后端 API),那是
ValidationMessageStore或自定义异步验证的活儿。
# 后端 # ai # 邮箱 # c# # red # NULL # for # 命名空间 # 表单验证 # 字符串 # int # double # 继承 # private # 异步 # ui # 自定义 # 表单 # 服务端 # 自己的 # 进阶 # 都不 # 也会 # 那是 # 可选
相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571 】
相关推荐: 佛山网站制作系统,佛山企业变更地址网上办理步骤? Laravel怎么解决跨域问题_Laravel配置CORS跨域访问 详解MySQL数据库的安装与密码配置 如何在阿里云服务器自主搭建网站? 高防网站服务器:DDoS防御与BGP线路的AI智能防护方案 Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性 如何为不同团队 ID 动态生成多个“认领值班”按钮 网站制作软件有哪些,制图软件有哪些? 如何破解联通资金短缺导致的基站建设难题? Win11怎样安装网易有道词典_Win11安装词典教程【步骤】 专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设? Laravel如何配置任务调度?(Cron Job示例) bing浏览器学术搜索入口_bing学术文献检索地址 java ZXing生成二维码及条码实例分享 高配服务器限时抢购:企业级配置与回收服务一站式优惠方案 Linux网络带宽限制_tc配置实践解析【教程】 如何在沈阳梯子盘古建站优化SEO排名与功能模块? 如何快速查询网站的真实建站时间? 高防服务器租用首荐平台,企业级优惠套餐快速部署 如何彻底卸载建站之星软件? Linux系统命令中tree命令详解 js实现点击每个li节点,都弹出其文本值及修改 详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南 如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环 大连网站制作公司哪家好一点,大连买房网站哪个好? Python3.6正式版新特性预览 Laravel如何升级到最新版本?(升级指南和步骤) 如何有效防御Web建站篡改攻击? 宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法 Laravel集合Collection怎么用_Laravel集合常用函数详解 如何快速搭建支持数据库操作的智能建站平台? 简历在线制作网站免费版,如何创建个人简历? Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件 青岛网站建设如何选择本地服务器? 悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤 Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程 laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法 制作企业网站建设方案,怎样建设一个公司网站? 香港服务器网站卡顿?如何解决网络延迟与负载问题? 详解Android——蓝牙技术 带你实现终端间数据传输 如何构建满足综合性能需求的优质建站方案? Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】 香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化 Java垃圾回收器的方法和原理总结 佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】 android nfc常用标签读取总结 Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程 Laravel中的withCount方法怎么高效统计关联模型数量 php做exe能调用系统命令吗_执行cmd指令实现方式【详解】 Python图片处理进阶教程_Pillow滤镜与图像增强


可继承