ASP C# 动态会话

本文关键字:会话 动态 ASP | 更新日期: 2023-09-27 18:31:44

试图建立一个(非常)简单的购物车。我在PHP中使用Sessions完成了此操作,据我所知,它与ASP Sessions略有不同。对于初学者来说,PHP会话只是服务器端cookie。在 ASP C# 中,我发现当您关闭应用程序时,它们会自行重置。但是,这对于我正在尝试做的事情来说很好。但是我遇到了一个障碍,因为我无法弄清楚如何创建一个可以随时添加的动态会话。

令我困惑的是,如果我只用饼干这样做,情况会大不相同:

    public ActionResult TestSession()
    {
        List<int> ids = new List<int> { 1, 2, 3, 4, 5 };
        Session["myIds"] = ids;
        return RedirectToAction("Index");
    }
    public ActionResult TestSession2()
    {
        List<int> ids = new List<int> { 11, 12, 13, 14, 15 };
        Session["myIds"] = ids;
        return RedirectToAction("Index");
    }

现在我正在我的 MVC 视图中使用一个简单的标签测试这些:

                        <a href="@Url.Action("TestSession", "Products")" class="AddLink"><button class="btn btn-default"> Add to Cart </button></a>    
                        <a href="@Url.Action("TestSession2", "Products")" class="AddLink"><button class="btn btn-default"> Add to Cart </button></a>    

让我感到困惑的一点是,当我调试时,Session["myIds"] 只保存它点击的值。如果我单击第一个,那么myIds将是1,2,3,4,5,如果我单击第二个,那么它会擦除第一个并执行11,12,13,14,15。这与PHP会话完全相反。现在,如果我使用 ASP cookie 执行此操作(不确定我是否可以在 cookie 中插入列表),那么它会很好。

所以我的问题是,我如何创建一个可以简单地添加但不删除之前值的会话?我确实尝试创建一个全局会话,但不太明白该怎么做。

ASP C# 动态会话

会话

只是一本字典。您没有创建新会话(没有动态会话之类的东西)。当您执行此操作Session["myIds"] = ids;时,您将在字典中创建一个新键(如果它不存在)并将值设置为 ids 。如果字典中已存在该键,则会覆盖该值。这就是为什么你会得到你所看到的行为。

如果要将元素添加到会话中存储的现有列表中,则如下所示:

if (Session["myIds"] as List<int> != null)
{
    (Session["myIds"] as List<int>).AddRange(ids);
}
else
{
    Session["myIds"] = ids;
}
会话在

ASP.NET 是简单的字典 - 键值存储。所以你所做的只是用新价值覆盖价值。与其覆盖,不如简单地执行以下操作:

       public ActionResult TestSession()
    {
        List<int> ids = new List<int> { 1, 2, 3, 4, 5 };
        if (Session["myIds"] as List<int> != null)
        {
            (Session["myIds"] as List<int>).AddRange(ids);
        }
        else
        {
            Session["myIds"] = ids;
        }
        return RedirectToAction("Index");
    }
    public ActionResult TestSession2()
    {
        List<int> ids = new List<int> { 11, 12, 13, 14, 15 };
        if (Session["myIds"] as List<int> != null)
        {
            (Session["myIds"] as List<int>).AddRange(ids);
        }
        else
        {
            Session["myIds"] = ids;
        }
        return RedirectToAction("Index");
    }

您必须首先检查Session["myIds"]是否正是您所期望的(List<int>)并且不为空,然后您只需将ID添加到列表中即可。

我建议阅读有关 C# 集合的信息。