editform 验证需显式绑定 model 并配合 dataannotationsvalidator 和 validationmessage;模型属性须 public 且含 get/set,验证特性需引用 system.componentmodel.dataannotations;表达式必须正确书写,提交推荐用 onvalidsubmit/oninvalidsubmit。

EditForm 不会自动验证,除非你明确告诉它“该验什么”和“怎么显示错”。
EditForm 必须绑定 Model 参数才能触发验证
-
EditForm不是靠内部@bind-Value推断模型的;漏写Model就等于没启用验证引擎 - 正确写法是:
<editform model="@user"></editform>,不是<editform></editform>或<editform model="user"></editform>(缺@符号) - 模型类必须引用
System.ComponentModel.DataAnnotations命名空间 - 所有带验证特性的属性(如
[Required])必须是public且含get和set(private set可接受,但get; private set;不行)
DataAnnotationsValidator 只计算,不渲染错误
-
<dataannotationsvalidator></dataannotationsvalidator>是验证逻辑的“驱动器”,但它本身不输出任何 HTML - 错误消息必须由
<validationmessage for="@(() => model.Email)"></validationmessage>显式拉取 -
For参数必须是表达式树:写成"Email"、@model.Email或@(() => model?.Email)(带空值检查)都会失效 - 如果模型是嵌套类型(如
Order.DeliveryAddress.Name),表达式得完整写成@(() => model.DeliveryAddress.Name)
提交逻辑要区分 OnValidSubmit 和 OnInvalidSubmit
- 不要用
OnSubmit+ 手动调用editContext.Validate()—— 这绕过了 Blazor 的自动流程,容易导致 UI 状态不同步 - 推荐直接用
OnValidSubmit="HandleValidSubmit",只在验证通过时执行业务逻辑 - 若需拦截验证失败行为(比如滚动到第一个错误字段),可加
OnInvalidSubmit="HandleInvalidSubmit",但通常只需保证ValidationMessage准确显示即可 - 提交中禁用按钮:用
disabled=@isSubmitting绑定布尔变量,在方法开头设为true,结尾设为false(注意异步操作中别漏掉恢复)
验证失败却没提示?先查这三处
- 模型属性上是否真加了
[Required]等特性,且命名空间已引入 -
EditForm内是否漏了<dataannotationsvalidator></dataannotationsvalidator> - 每个输入控件下方是否配了对应字段的
<validationmessage for="..."></validationmessage>,而不是只靠顶部的<validationsummary></validationsummary>
Blazor 表单验证真正难的不是写代码,而是模型、组件、表达式三者之间的绑定关系必须严丝合缝——少一个 @,缺一个 set,错一层嵌套,验证就静默失效。











