You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS0120错误求助:已声明属性仍提示非静态字段需对象引用

解决CS0120错误:非静态字段/方法/属性需要对象引用

错误信息

严重性 代码 描述 项目 文件 行 抑制状态
Error (active) CS0120 非静态字段、方法或属性“Model_Purchases.Details”需要对象引用 Create.cshtml 175

相关代码片段

create.cshtml(错误行标注)

@foreach (var detail in Model_Purchases.Details){ <!-- 错误出现在这一行 -->
            <tr>
                <td>
                    <div class="form-group">
                        <input asp-for="@detail.Product" class="form-control" />
                        <span asp-validation-for="@detail.Product" class="text-danger"></span>
                    </div>
                </td>
                <td>
                    <div class="form-group">
                        <input asp-for="@detail.Description" class="form-control" />
                        <span asp-validation-for="@detail.Description" class="text-danger"></span>
                    </div>
                </td>

Model_Purchases.cs

namespace Accounting8.Data
{
    public class Model_Purchases
    {
        // 其他属性

        public List<Model_PurchasesDetails> Details { get; set; }

        public Model_Purchases()
        {
            Details = new List<Model_PurchasesDetails>();
        }
    } 
}

create.cshtml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Accounting8.Data;
using Microsoft.EntityFrameworkCore;

namespace Accounting8.Pages.Purchases.Purchase_Requests
{
    public class CreateModel : PageModel
    {
        private readonly Accounting8.Data.ApplicationDbContext _context;
        
        public CreateModel(Accounting8.Data.ApplicationDbContext context)
        {
            _context = context;
            Model_Purchases = new Model_Purchases();
            Model_Purchases.Details = new List<Model_PurchasesDetails>();
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public Model_Purchases Model_Purchases { get; set; }

        [BindProperty]
        public Model_PurchasesDetails Model_PurchasesDetails { get; set; }
       
        [BindProperty]
        public List<Model_PurchasesDetails> Details { get; set; }

        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            // 将采购记录添加到数据库
            _context.PurchasesM.Add(Model_Purchases);
            await _context.SaveChangesAsync();

                // 遍历采购明细并添加到数据库
                foreach (var detail in Model_Purchases.Details)
                {
                    detail.TransactionNumber = Model_Purchases.TransactionNumber;
                    _context.PurchasesDetailsM.Add(detail);
                }
                await _context.SaveChangesAsync();


            return RedirectToPage("./Index");
        }

    }
}

问题原因与解决方法

错误根源是在Razor页面中,你直接用类名Model_Purchases访问实例属性Details,但Details是非静态属性,必须通过类的实例来访问。

在CreateModel PageModel类中,你已经定义了名为Model_Purchases的实例属性,所以在Razor页面中需要通过Model(当前PageModel的实例引用)来访问这个属性:

修改create.cshtml中的循环行:

@foreach (var detail in Model.Model_Purchases.Details){

补充优化建议

  • Razor页面中,Model关键字代表当前绑定的PageModel实例(即CreateModel的实例)
  • 你在CreateModel中额外定义的Details属性属于冗余项,因为Model_Purchases实例已经包含了Details列表,建议删除这个属性避免混淆

内容的提问来源于stack exchange,提问作者Beginner12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:34:55