C# Razor中使用保留关键字default作为属性名报错求助
解决方案
default是C#保留关键字,要访问以关键字命名的类属性,需要按以下规则处理:
- 首先在C#语法层面,给关键字属性名加
@前缀转义,让编译器将其识别为普通标识符 - 在Razor中输出时,将完整的C#表达式包裹在
@()中,避免Razor解析歧义
正确写法示例
@foreach (你的命名空间.Networks n in Model.networks) { <tr> <td>default</td> <td>@(n.@default)</td> </tr> }
备选方案(上述写法无效时使用)
如果受框架版本限制上述写法不生效,可以通过反射提前取值中转避开冲突:
@foreach (你的命名空间.Networks n in Model.networks) { var defaultValue = n.GetType().GetProperty("default").GetValue(n, null); <tr> <td>default</td> <td>@defaultValue</td> </tr> }
可选根治方案
如果有权限修改Networks类的定义,建议给属性加字段映射注解,将属性名改为非关键字形式,从根源避免冲突:
// System.Text.Json 序列化映射示例 [JsonPropertyName("default")] public bool IsDefault { get; set; } // EFCore 数据库字段映射示例 [Column("default")] public bool IsDefault { get; set; }
修改后Razor中直接写@n.IsDefault即可正常访问。
错误写法原因说明
- 直接写
@n.default:Razor会将default识别为C#关键字表达式,而非属性名,因此抛出上下文不存在该名称的错误 - 写
@n.@(@default):内层的@default会被Razor识别为独立变量,你未定义该变量自然报错 - 此前你尝试的写法输出类名+
@default,是因为Razor未正确识别转义规则,将n.@default当成了字符串拼接处理
内容的提问来源于stack exchange,提问作者Faggiano
相关产品推荐
相关产品推荐

