EditForm的Model属性引用对象时@person与person写法的正确用法
Blazor EditForm组件Model属性两种写法差异说明
两种写法运行效果完全等价,都是符合Razor语法规范的正确写法,不存在理解偏差或者写法错误的问题。
语法规则依据
Razor编译器对组件参数的赋值有专门的隐式解析规则:
- 给Blazor组件的参数(比如EditForm的Model参数)赋值时,只要等号后的值不是明确的静态字符串字面量,编译器会默认将内容识别为C#表达式做解析,这时候表达式开头的
@前缀属于可省略的冗余标记。
你提到的两种写法编译后生成的运行时代码完全一致:
<!-- 写法1:带@前缀 --> <EditForm Model="@person"> </EditForm> <!-- 写法2:省略@前缀 --> <EditForm Model="person"> </EditForm> @code { Person person = new Person(); }
必须加@前缀的场景
只有以下场景不能省略@,否则会被识别为静态字符串导致逻辑错误:
- 给原生HTML元素的属性绑定C#值时,比如
<input placeholder="@person.Name" />,如果省略@写成placeholder="person.Name",会直接渲染静态文本"person.Name",不会读取变量值 - 属性值是静态文本和C#变量的拼接内容时,比如
<div class="user-card @user.ActiveClass">,必须加@标记C#代码段的起始位置
写法混用的原因
不同示例出现两种写法纯粹是开发者书写习惯差异:
- 习惯加
@的开发者通常是为了做视觉区分,读代码时可以快速定位到所有动态绑定的C#值,和纯静态字符串属性做区隔 - 习惯省略
@的开发者是遵循组件参数的隐式解析规则,减少不必要的标记简化代码
两种写法不存在优劣之分,团队内统一编码规范即可。
内容的提问来源于stack exchange,提问作者Darkmatter5
相关产品推荐
相关产品推荐

