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

ASP.NET视图向控制器传递ID时报NullReferenceException错误如何解决

ASP.NET 视图传参到Post方法空引用异常排查

错误提示

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

问题根因

  • 核心原因:[HttpPost]修饰的List方法执行删除逻辑后,直接调用return View(),没有向视图传递List<CarListViewModel>类型的模型数据。你的视图绑定了强类型模型,当Model为null时,代码中访问Model.Count、Model[i]等成员就会触发空引用异常。
  • 潜在问题:删除逻辑中没有对FirstOrDefault的返回结果做空校验,如果传入的carId不存在,Car变量为null,调用db.Cars.Remove(Car)时也会抛出空引用异常。
  • 拼写隐患:你在GET方法的Select查询中实例化的是CarsListViewModel,但定义的视图模型类名是CarListViewModel,如果是拼写错误会导致类型不匹配报错。

修复方案

  1. 调整Post方法的返回逻辑,使用PRG(Post-Redirect-Get)模式,删除完成后重定向到GET类型的List方法,避免空模型问题同时防止用户刷新页面重复提交删除请求:
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public IActionResult List(int carId)
{
    var Car = db.Cars.FirstOrDefault(x => x.Id == carId);
    // 增加空校验避免删除不存在的对象时报错
    if (Car != null)
    {
        db.Cars.Remove(Car);
        db.SaveChanges();
    }
    // 重定向到GET类型的List方法,自动加载最新的车辆列表数据
    return RedirectToAction(nameof(List));
}
  1. 核对视图模型类名,确保GET方法中实例化的类名和定义的类名一致,避免类型不匹配问题。
  2. 可选优化:在视图的form标签中增加asp-action="List"明确指定提交目标,避免路由匹配异常:
<form method="post" asp-action="List">
    <input type="hidden" name="carId" value="@Model[i].CarId" />
    <button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:00