Blazor 表单验证 DataAnnotations 使用方法

发布时间 - 2025-12-26 00:00:00    点击率:
Blazor表单验证使用DataAnnotations特性(如[Required]、[EmailAddress])声明规则,配合EditForm、DataAnnotationsValidator及ValidationMessage组件实现自动校验;需注入EditContext调用Validate()手动触发,并支持自定义验证特性。

Blazor 表单验证用 DataAnnotations 很直接,核心是给模型属性加特性(如 [Required][EmailAddress]),再配合 EditFormValidationSummary/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 是关键组件,没有它,特性不会生效;ValidationMessageFor 参数必须是表达式(@(() => ...)),不能写字符串或变量。

手动触发表单验证

默认只在提交或失去焦点时校验。如需主动校验(比如点击“下一步”但不提交),可注入 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滤镜与图像增强