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
相关产品推荐
相关产品推荐

