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
排查方向及解决方法
视图模型传递检查
- 确认
Upsert视图顶部已正确声明模型类型:@model ProductVM(需替换为实际命名空间下的模型) - 检查控制器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请求检查
- 视图中表单控件需通过
asp-for正确绑定模型属性,确保属性名完全匹配:<input asp-for="Product.Name" class="form-control" /> - 控制器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
相关产品推荐
相关产品推荐

