ASP.NET MVC中HTML属性是否都需加@符号?三类相关疑问
Razor视图中HTML属性@符号的使用疑问解答
在你的项目里,声明HTML属性时用@class="className"或@id="ID",但@Html.CheckBoxFor的匿名参数里disabled没加@,以下是针对你疑问的具体解答:
1. 为何HTML属性disabled前未添加@符号?
因为disabled不是C#的关键字或上下文关键字,在Razor的匿名对象里直接写属性名即可,编译器会识别它是HTML属性对应的匿名对象键值对。而class、id属于C#的上下文关键字(比如class用来定义类,id在部分语法场景下有特殊含义),如果直接写class="xxx",编译器会把它当成C#关键字处理,导致语法错误,所以必须加@来转义,告诉编译器这是一个普通的属性名。
2. @符号并非在所有场景下都是必需的吗?
没错,@符号的使用分场景:
- 必须加的情况:当匿名对象的属性名是C#关键字/上下文关键字时(比如
class、id、checked、struct等),必须加@转义,避免编译器混淆;另外在Razor视图的HTML模板中输出C#变量或表达式时,也需要用@开头。 - 不需要加的情况:当属性名不是C#关键字时,像
disabled、placeholder、data-*这类,直接写属性名就行,编译器能正确识别为匿名对象的属性,对应生成HTML的属性。
3. HTML属性checked是否需要添加@符号?
需要。因为checked是C#的关键字(用于checked表达式控制整数溢出检查),如果在匿名对象里直接写checked="checked",编译器会把checked当成关键字解析,引发语法错误,所以必须写成@checked="checked"才能让编译器识别这是一个HTML属性对应的匿名对象属性。
内容的提问来源于stack exchange,提问作者urizark
相关产品推荐
相关产品推荐

