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

ASP.NET添加产品时触发NullReferenceException问题求助

ASP.NET 添加产品时 NullReferenceException 问题排查

异常信息

System.NullReferenceException: 'Object reference not set to an instance of an object.'
关联提示:Microsoft.AspNetCore.Mvc.Razor.RazorPage.Model.get returned null

排查方向及解决方法

  • 视图模型传递检查

    1. 确认Upsert视图顶部已正确声明模型类型:@model ProductVM(需替换为实际命名空间下的模型)
    2. 检查控制器Get请求返回视图的代码,必须传递初始化后的模型实例:
      // 错误写法:未传递模型,导致View中Model为null
      return View();
      // 正确写法:初始化模型后传递
      return View(new ProductVM());
      
  • ProductVM 属性初始化检查
    如果ProductVM包含导航属性(如分类列表、品牌列表),需在控制器中提前赋值,避免视图中访问null属性:

    public IActionResult Upsert(int? id)
    {
        ProductVM vm = new ProductVM();
        // 初始化关联属性,示例:
        vm.Categories = _db.Categories.ToList();
        vm.Brands = _db.Brands.ToList();
        // 其他逻辑...
        return View(vm);
    }
    
  • 表单绑定与Post请求检查

    1. 视图中表单控件需通过asp-for正确绑定模型属性,确保属性名完全匹配:
      <input asp-for="Product.Name" class="form-control" />
      
    2. 控制器Post Action需正确接收模型参数,避免参数名不匹配或[Bind]遗漏属性:
      [HttpPost]
      [ValidateAntiForgeryToken]
      public IActionResult Upsert(ProductVM vm)
      {
          if(ModelState.IsValid)
          {
              // 确保vm.Product不为null再执行添加操作
              if(vm.Product.Id == 0)
              {
                  _db.Products.Add(vm.Product);
              }
              _db.SaveChanges();
              return RedirectToAction(nameof(Index));
          }
          // 验证失败时需重新初始化关联属性,避免视图中再次出现null
          vm.Categories = _db.Categories.ToList();
          return View(vm);
      }
      
  • 数据库上下文与依赖注入检查
    确认控制器中数据库上下文(如_db)已通过构造函数正确注入,避免操作数据库时出现null引用:

    private readonly ApplicationDbContext _db;
    
    public ProductController(ApplicationDbContext db)
    {
        _db = db;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:41:40