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

ASP.NET Core中Session购物车数量更新失效问题求助

搞定ASP.NET Core购物车数量不更新的问题

嗨,我帮你找到了问题的核心所在,咱们一步步来解决这个购物车数量不更新的bug!

问题出在哪?

你在HttpPost Cart方法里成功增加了商品数量,但跳转到HttpGet Cart后又变回旧值,本质原因是:你修改了内存中列表的商品属性,但没有把更新后的列表重新存回Session。ASP.NET Core的Session存的是对象序列化后的快照,内存里改了对象属性,Session不会自动同步,必须手动把新的列表写回去才行。

直接修改你的代码

把你的HttpPost Cart方法改成下面这样,关键就是加一行重新存入Session的代码:

[HttpPost]
public IActionResult Cart(int id) {
    List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
    var item = spray.SingleOrDefault(x => x.Id.Equals(id));
    if (item != null) {
        item.Quantity++;
        // 这行是关键!把更新后的列表重新存回Session
        HttpContext.Session.Set("spray", spray);
    }
    return RedirectToAction(nameof(Cart));
}

为啥之前的代码不行?

原来的代码里,你只是从Session取出列表、改了元素的Quantity,但没把改好的列表重新写入Session。等你跳转到Get方法时,又从Session里读了旧的序列化数据,自然看不到更新后的数量啦。

额外小检查(如果还没好的话)

要是改完还是有问题,你可以检查下Utility.SessionExtensions的Set和Get方法是不是正确实现了序列化。比如是不是用了正确的JSON序列化方式,确保对象的修改能被正确存进Session。给你一个常用的实现参考:

public static class SessionExtensions
{
    public static void Set<T>(this ISession session, string key, T value)
    {
        session.SetString(key, JsonSerializer.Serialize(value));
    }

    public static T Get<T>(this ISession session, string key)
    {
        var value = session.GetString(key);
        return value == null ? default(T) : JsonSerializer.Deserialize<T>(value);
    }
}

这样改完之后,你再点击“+”按钮,购物车的数量应该就能正常更新啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:42:52