C# CS0120 错误解析与 Razor 页面中非静态成员访问的正确写法
技术百科
霞舞
发布时间:2026-01-28
浏览: 次 在 asp.net core razor 页面中,当尝试在 `@foreach` 中直接访问 `model_purchases.details` 时出现 cs0120 错误,根本原因是 razor 视图引擎将未限定的 `model_purchases` 误识别为类型名而非页面模型属性,导致编译器认为你在静态上下文中调用非静态成员。
该错误(CS0120: An object reference is required for the non-static field, method or property)通常出现在试图在静态上下文或未明确作用域中访问实例成员的场景。虽然 C# 编译器本身能清晰区分类型与实例属性,但 Razor 视图(.cshtml)在编译时会生成一个继承自 RazorPage
✅ 正确解决方案是显式使用 this. 限定符,强制 Razor 将其识别为当前页面实例的属性:
@foreach (var detail in this.Model_Purchases.Details)
{
}⚠️ 补充注意事项:
- 避免命名歧义:强烈建议将模型属性名与类型名区分开。例如,将 public Model_Purchases Model_Purchases { get; set; } 改为 public Model_Purchases PurchaseModel { get; set; },既提升可读性,也彻底规避 Razor 解析歧义。
- 确保模型已初始化:在 CreateModel.OnGet() 或构造函数中初始化 PurchaseModel = new Model_Purchases() 是必要的,否则 Details 为 null 会导致运行时 NullReferenceException(即使编译通过)。
-
无需额外声明 Details 属性:create.cshtml.cs 中的 [BindProperty] public List
Details { get; set; } 是冗余的,且可能干扰模型绑定。应删除该属性,仅保留 Model_Purchases 并依赖其内部 Details 集合。 -
验证数据绑定完整性:确保 Model_
PurchasesDetails 类的属性具有正确的 [Required] 等数据注解,并在视图中使用 asp-for 绑定到 detail.Property,以支持客户端与服务端双重验证。
总结:CS0120 在 Razor 中多由“类型名与属性名同名”引发的解析歧义所致。使用 this. 显式限定是最直接有效的修复方式;长远来看,遵循清晰命名规范(如 PurchaseModel 而非 Model_Purchases)是预防此类问题的最佳实践。
# ai
# 将其
# 你在
# 出现在
# 并在
# 此类
# 绑定
# 而非
# public
# Property
# html
# c#
# 构造函数
# .net
# Static
# red
# this
# NULL
# foreach
# 继承
# 作用域
# 根本原因
# Object
# for
# 强烈建议
# 服务端
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Python技术债务管理_长期维护解析【教程】
- Win11怎么修改DNS服务器 Win11设置DN
- Win11怎样安装微信开发者工具_Win11安装开
- php485在php5.6下能用吗_php485旧
- 如何在Golang中使用内置函数_Golangle
- 如何在Golang中使用container/hea
- c++怎么设置线程优先级与cpu亲和性_c++ 多
- Python数据挖掘核心算法实践_聚类分类与特征工
- Windows怎样关闭开始菜单推荐广告_Windo
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- Win11怎么查看激活状态_查询Windows 1
- 如何在Golang中实现WebSocket广播_使
- Win11怎么关闭用户账户控制UAC_Window
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- php中::能用于接口静态方法吗_接口静态方法调用
- Go 中实现 Python urllib.quot
- PythonDocker高级项目部署教程_多容器管
- Linux如何安装Golang环境_Linux下G
- Windows的便笺功能如何使用?(桌面备忘技巧)
- c# 在高并发场景下,委托和接口调用的性能对比
- Win11输入法切换快捷键怎么改_Windows
- 如何使用正则表达式提取以编号开头、后接多个注解的逻
- Win10如何卸载微软拼音输入法 Win10只保留
- 静态属性修改会影响所有实例吗_php作用域操作符下
- Windows如何查看和管理已安装的字体?(字体文
- Win11怎么设置任务栏透明_Windows11使
- Python解释执行模型_字节码流程说明【指导】
- c++ namespace命名空间用法_c++避免
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- 如何在Golang中使用time处理时间_Gola
- c++中如何使用虚函数实现多态_c++多态性实现原
- Python文件管理规范_工程实践说明【指导】
- 如何使用Golang读取日志文件_Golang b
- Win10系统怎么查看显卡温度_Win10任务管理
- PowerShell怎么创建复杂的XML结构
- Win10怎样清理C盘爱奇艺缓存_Win10清理爱
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- Win11应用商店下载慢怎么办 Win11更改DN
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- c++中的std::conjunction和std
- Win11怎么设置闹钟_Windows 11时钟应
- C++中的协变与逆变是什么?C++函数指针与返回类
- Win10怎样清理C盘浏览器缓存_Win10清理浏
- php订单日志怎么记录发货_php记录订单发货操作
- Win11开机速度慢怎么优化_Win11系统启动加
- Windows 11如何开启文件夹加密(EFS)_
- Win11怎么设置触控板手势_Windows11三
- Win11怎么打开注册表_Windows 11注册
- Win11文件扩展名怎么显示_Win11查看文件后
- 如何在 Go 后端安全获取并验证前端存储的 JWT


QQ客服