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

ASP.NET Core MVC添加购物车触发ArgumentNullException问题求助

解决ASP.NET Core MVC 添加购物车时的ArgumentNullException错误

问题核心分析

虽然商品能成功加入购物车,但ArgumentNullException: Value cannot be null. (Parameter 'source')错误通常是LINQ操作(如foreach、Count()等)作用于null集合导致的。大概率是添加购物车的POST请求完成后,返回视图时未正确传递模型数据,或视图中未对可能为null的集合做检查。

具体排查与解决步骤

1. 修正POST Action的返回逻辑(推荐PRG模式)

如果你的添加购物车Action在完成操作后直接返回Inventory视图但未传递模型,会导致视图依赖的商品集合为null:

// 错误示例:未传递模型,视图中遍历null集合报错
[HttpPost]
public IActionResult AddToCart(int id)
{
    // 购物车添加逻辑
    return View("Inventory");
}

解决方法:

  • 采用Post/Redirect/Get(PRG)模式,重定向到GET类型的Inventory Action,让它重新获取完整模型:
[HttpPost]
public IActionResult AddToCart(int id)
{
    // 购物车添加逻辑
    return RedirectToAction(nameof(Inventory));
}
  • 若必须直接返回视图,需重新获取商品数据并传递:
[HttpPost]
public IActionResult AddToCart(int id)
{
    // 购物车添加逻辑
    var inventoryItems = _dbContext.Products.ToList(); // 重新查询商品列表
    return View("Inventory", inventoryItems);
}

2. 给视图添加空值检查

打开你的Inventory视图,查看是否有遍历模型的代码(如@foreach (var item in Model)),添加空值判断避免null引用:

@model IEnumerable<YourProductModel>

@if (Model != null)
{
    foreach (var item in Model)
    {
        <!-- 商品项渲染代码 -->
    }
}

3. 确保集合永远不为null

在控制器的GET Inventory Action中,初始化空集合避免返回null模型:

public IActionResult Inventory()
{
    // 若数据库查询返回null,初始化空列表
    var products = _dbContext.Products?.ToList() ?? new List<YourProductModel>();
    return View(products);
}

4. 检查购物车相关的Session/服务

如果视图中需要显示购物车数据(如商品数量),确保读取购物车时初始化空集合:

public List<CartItem> GetCurrentCart()
{
    // 从Session读取购物车,若为null则返回空列表
    return HttpContext.Session.Get<List<CartItem>>("Cart") ?? new List<CartItem>();
}

5. 精准定位错误行

通过Visual Studio的异常捕获功能,或查看浏览器F12控制台的错误堆栈,找到具体抛出异常的代码行,能更快锁定问题(比如是视图中的某行遍历,还是控制器中的某个LINQ操作)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:15