清除后保留会话变量值?

Keep a session variable value after it has been cleared?

问题背景:

我有一个会话对象,用于存储名为 'CartItems' 的对象列表。我将此对象转换为实际实例,将其设置为另一个 List 变量,然后最后清除列表。然后将其发送到 ViewBag 变量并发送到视图。

问题:

我尝试做的事情可能无法实现,但目前只要我清除 CartItems 的列表实例,所有对此的引用也会丢失。请看以下代码:

 public ActionResult Complete(string OrderId)
    {
        //Retrieve the CartItem List from the Session object.
        List<CartItem> cartItems = (List<CartItem>)Session["Cart"];

        //Set the list value to another instance.
        List<CartItems>copyOfCartItems= cartItems;

        //Set the ViewBag properties.
        ViewBag.OrderId = OrderId;
        ViewBag.CartItems = copyOfCartItems;

        //Clear the List of CartItems. This is where the **issue** is occurring.
        //Once this is cleared all objects that have properties set from
        //this list are removed. This means the ViewBag.CartItems property 
        //is null.
        cartItems.Clear();

        return View(ViewBag);
    }

清除List后是否可以存储这个值而不丢失?

如果要清除Session["Cart"],请使用Session.Remove("Cart")

当你

ListcopyOfCartItems= 购物车;

您正在创建另一个名为 copyOfCartItems 的变量,它指向同一对象 cartItems。换句话说,cartItems 和 copyOfCartItems 现在是同一对象的两个名称。

所以当你做 cartItems.clear();您正在清除基础对象上的所有列表项。

要解决这个问题,请复制 cartItems,而不是创建引用

List<CartItems> copyOfCartItems = new List<CartItems>();

cartItems.ForEach(copyOfCartItems.Add); //copy from cartItems