Я создаю корзину с состоянием сеанса. Но у меня проблема: когда я добавляю продукт в корзину, он видит, как создает новый сеанс, а не добавляет к текущему сеансу, поэтому он показывает только последний добавленный продукт.Не удается добавить товар в текущий сеанс ShoppingCart ASP.NET
Это, как я организовал мой сайт:
Класса * App_Code/Cart.cs *
public class Cart
{
DataTable cart = new DataTable();
public Cart()
{
cart.Columns.Add("id");
cart.Columns.Add("image");
cart.Columns.Add("name");
cart.Columns.Add("price");
cart.Columns.Add("quantity");
cart.Columns.Add("total");
}
public DataTable getCart()
{
return cart;
}
public DataTable addProductToCart(int id, string image, string name, double price)
{
if (cart.Rows.Count != 0)
{
foreach (DataRow row in cart.Rows)
{
if (row["id"].ToString().Equals(id.ToString()))
{
row["quantity"] = int.Parse(row["quantity"].ToString()) + 1;
row["total"] = int.Parse(row["total"].ToString()) * price;
return cart;
}
}
}
DataRow newrow = cart.NewRow();
newrow["id"] = id;
newrow["image"] = image;
newrow["name"] = name;
newrow["price"] = price;
newrow["quantity"] = 1;
newrow["total"] = price;
cart.Rows.Add(newrow);
return cart;
}
И это отделенный код из ProductDetail.aspx:
public partial class ProductDetail : System.Web.UI.Page
{
Cart crt;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void datalistProductDetail_ItemCommand(object source, DataListCommandEventArgs e)
{
switch (e.CommandName)
{
case "Add":
DataListItem item1 = e.Item;
int id = int.Parse((item1.FindControl("idLabel") as Label).Text);
string name = (item1.FindControl("nameLabel") as Label).Text;
double price = double.Parse((item1.FindControl("priceLabel") as Label).Text);
string image = ((item1.FindControl("img") as Image).ImageUrl.Replace("~/images/sp/", ""));
crt.addProductToCart(id, image, name, price);
setCartToSession(crt);
break;
}
}
protected void setCartToSession(Cart crt)
{
Session["Cart"] = crt;
}
}
И это является ViewCart.aspx:
public partial class ViewCart: System.Web.UI.Page
{
Cart crt;
protected void Page_Load(object sender, EventArgs e)
{
gh = getGioHangFromSession();
refresh_gridviewCart();
}
protected void refresh_gridviewCart()
{
gridviewCart.DataSource = crt.getCart();
gridviewCart.DataKeyNames = new string[] { "id" };
gridviewCart.DataBind();
}
protected Cart getCartFromSession()
{
if (Session["Cart"] == null)
{
return new Cart();
}
else return (Session["Cart"] as Cart);
}
protected void setCartToSession(Cart crt)
{
Session["Cart"] = crt;
}
}
это показ 'Не удается привести объект типа _GioHang 'к типу' System. Collections.Generic.List1 [GioHang] '._ at 'dt.AddRange ((Список) Сессия [" GioHang "]);' –
phudq90
вы увидите код ur? – Pankaj
Я отредактировал codebehind ProductDetail.aspx, с изменением 'setCartToSession', как вы писали выше. – phudq90