[转载]购物车功能分析 – intcry的博客 – 博客园.
把商品添加到购物车(订购)
删除购物车中已订购的商品、
修改购物车中某一商品的订购数量
清空购物车
显示购物车中商品的清单及数量、价格
当然,使用cookie也是有缺点的,cookie是由服务器产生,存储在客户端的一段信息。大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。
在使用cookie存数据的时候,一个重要的问题就是cookie不能存数组,对象。只能存字符串。所以在存数据的时候需要把购物车中的数据转换成字符串形式存入cookie中,需要的时候再还原加载入购物车。
public static DataTable dt;
/// <summary>
/// 创建虚拟表
/// </summary>
protected void BuildDataTables()
{
dt = new DataTable("Product");//新建一张商品表,表名为"Product"
dt.Columns.Add(new DataColumn("ProductID")); //商品编号
dt.Columns.Add(new DataColumn("ProductName")); //商品名称
dt.Columns.Add(new DataColumn("quantity")); //购买数量
dt.Columns.Add(new DataColumn("totalPrice")); //商品总价
dt.Columns.Add(new DataColumn("Price")); //商品单价
dt.PrimaryKey = new DataColumn[] { dt.Columns["ProductID"] }; //设置主键为ProductID
}
/// <summary>
/// 把虚拟表中的商品编号和购买数量转换成字符串并写入cookie
/// </summary>
protected void WriteInCookie()
{
string str = "";
foreach (DataRow row in dt.Rows)
{
str = row["ProductID"] + "|" + row["quantity"] + "," + str;
}
str = str.TrimEnd(',');
//往购物车中添加商品
HttpCookie aCookie = null;
if (HttpContext.Current.Request.Cookies["ShoppingCart"] == null)
{
//如果Cookies中不存在ShoppingCart,则创建
aCookie = new HttpCookie("ShoppingCart");
}
else
{
//如果Cookies中存在ShoppingCart,则清空
aCookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
aCookie.Value = null;
}
aCookie.Value = str;
//设置cookie有效期为1天
aCookie.Expires = DateTime.Now.AddDays(1);
HttpContext.Current.Response.Cookies.Add(aCookie);
}
/// <summary>
/// 从cookie中取出数据填充到虚拟表中
/// </summary>
protected void ReadCookie()
{
if (HttpContext.Current.Request.Cookies["ShoppingCart"] != null)
{
dt = null;
BuildDataTables();
//如果Cookies中存在ShoppingCart,则取出数据添加到Datatable中
HttpCookie aCookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
string cart = aCookie.Value;
string[] arr = cart.Split(',');
for (int i = 0; i < arr.Length; i++)
{
string[] str = arr[i].Split('|');
AddDatatable(Convert.ToInt32(str[0]), Convert.ToInt32(str[1]));
}
}
}
/// <summary>
/// 往虚拟表中添加数据
/// </summary>
/// <param name="ProductID">商品编号</param>
/// <param name="Quantity">购买数量</param>
public void AddDatatable(int ProductID, int Quantity)
{
//按照产品编号查询所有产品信息
product prod = new ProductInfo().GetProductByProductId(ProductID)[0];
//新建一行数据
DataRow dr = dt.NewRow();
dr["ProductID"] = ProductID;
dr["ProductName"] = prod.productName;
dr["quantity"] = Quantity;
dr["Price"] = prod.price;
dr["totalPrice"] = Quantity * prod.price;
//将这一行数据添加到虚拟表中
dt.Rows.Add(dr);
}
Mikel































