清除后保留会话变量值?
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
问题背景:
我有一个会话对象,用于存储名为 '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