我已将项目添加到列表中。但是问题是在这里,我在单击按钮后将项目一一添加到列表中。每次列表中仅显示一个对象。
List<Items> _objList = new List<Items>();
public ActionResult AddNewItems(int ItemId)
{
Items items = itemBusiness.GetItemByItemId(ItemId);
_objList.Add(new Items { ItemId =items.ItemId,ItemName =items.ItemName,
ItemPrice = items.ItemPrice });
Session["ItemSession"] = _objList;
return RedirectToAction("Index","Home");
}
public class Items
{
public int ItemId { get; set; }
public string ItemCode { get; set; }
public string ItemName { get; set; }
public string ImageUrl { get; set; }
public int? ItemBadge { get; set; }
public DateTime? AddedDate { get; set; }
public int? AddedBy { get; set; }
public DateTime? UpdatedDate { get; set; }
public int? UpdatedBy { get; set; }
public bool? IsActive { get; set; }
public decimal ItemPrice { get; set; }
}
答案 0 :(得分:3)
您需要存储列表,然后检索它以向其中添加新项目。可以通过几种方法完成该创建,包括调用一个创建的方法(如果创建的方法不存在),并返回会话列表,如
var _objList = (List<Items>)Session["ItemSession"];
只需确保您确实拥有一个,这样它就不会引发InvalidCastException
此代码假定您确实在添加另一个列表之前已将其存储在某些“创建”方法中。
public ActionResult AddNewItems(int ItemId)
{
var _objList = (List<Items>)Session["ItemSession"];
Items items = itemBusiness.GetItemByItemId(ItemId);
_objList.Add(new Items { ItemId = items.ItemId,
ItemName = items.ItemName,
ItemPrice = items.ItemPrice });
Session["ItemSession"] = _objList;
return RedirectToAction("Index","Home");
}
替代示例,在类上设置一个属性,并使用该属性来避免强制转换异常,方法是检查是否为null并创建是否存在null(并按需存储在末尾):
ItemsHolder.Add(new Items { ItemId = items.ItemId,
ItemName = items.ItemName,
ItemPrice = items.ItemPrice });
添加到您的课程
// the property
public List<Items> ItemsHolder
{
get
{
object ItemsSession = Session["ItemSession"] as List<Items>;
if (ItemsSession == null)
{
ItemsSession = new List<Items>();
Session["ItemSession"] = ItemsSession;
}
return (List<Items>)ItemsSession;
}
}
旁注,请确保您的商品可序列化。您可能只想存储ItemId
的列表,并根据需要获取名称和价格,以避免出现某些问题。 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/index