有很多做商城的程序,不清楚购物车改如何操作,这里给大家分享下步骤和代码
实现逻辑思维:
1、使用JSON保存需要加入购物车的商品数据
2、使用COOKIE保存JSON,并加密处理
3、写一个购物车COOKIE操作类,包含一个商品实体(商品ID、商品属性、数量),个人觉得够了,不够自己加
4、使用ajax进入加入购物车、读取、修改、删除等
以下直接贴代码,有详细注释,请仔细看
1、代码中的a2ugHX0b 是编码密钥,我是固定死了的,你可以改动为你自己的
2、代码中的BaseConfigs.GetCookiedomain 是我域名的配置属性,你可以改成你自己的域名
【工具类Utils.cs-操作COOKIE】
///<summary>
///共用工具
///</summary>
public class Utils
{
///<summary>
/// list转为json
///</summary>
///<typeparam name="T">类型</typeparam>
///<param name="data">数据</param>
///<returns>json数据</returns>
public static string Obj2Json<T>(T data)
{
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, data);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
catch
{
return null;
}
}
///<summary>
/// json转为list
///</summary>
///<param name="json">json数据</param>
网页购物车代码
///<param name="t">类型</param>
///<returns>list</returns>
public static Object Json2Obj(String json, Type t)
{
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))                {
return serializer.ReadObject(ms);
}
}
catch
{
return null;
}
}
///<summary>
///写COOKIE 通用
///</summary>
///<param name="name">名称</param>
///<param name="value">值</param>
///<param name="time">过期时间(秒)</param>
public static void WriteCookie(string name, string value, int time)
{
//先清除此COOKIE
HttpCookie tmpcookie = (HttpCookie)HttpContext.Current.Request.Cookies[name];
if (tmpcookie != null)
{
tmpcookie.Values.Clear();
tmpcookie.Expires = DateTime.Now.AddDays(-1);
tmpcookie.Domain = BaseConfigs.GetCookiedomain;//可改成您自己的域名HttpContext.Current.Response.Cookies.Add(tmpcookie);
}
//然后再添加
HttpCookie cookie = new HttpCookie(name);
cookie.Values.Add("CONTENT", HttpUtility.UrlEncode(DES.Encode(value, "a2ugHX0b"), Encoding.GetEncoding("UTF-8")));
cookie.Expires = DateTime.Now.AddSeconds(time);
cookie.Domain = BaseConfigs.GetCookiedomain;//可改成您自己的域名
HttpContext.Current.Response.Cookies.Add(cookie);
}
///<summary>
///获取COOKIE 通用
///</summary>
///<param name="name">名称</param>
///<returns>值</returns>
public static string GetCookie(string name)
{
HttpCookie cookie = (HttpCookie)HttpContext.Current.Request.Cookies[name];
if (cookie != null)
{
return DES.Decode(HttpUtility.UrlDecode(cookie.Values["CONTENT"], Encoding.GetEncoding("UTF-8")), "a2ugHX0b");
}
return"";
}
///<summary>
///清楚COOKIE 通用
///</summary>
///<param name="name">名称</param>
public static void clearCookie(string name)
{
HttpCookie cookie = (HttpCookie)HttpContext.Current.Request.Cookies[name];
if (cookie != null)
{
cookie.Values.Clear();
cookie.Expires = DateTime.Now.AddDays(-1);
cookie.Domain = BaseConfigs.GetCookiedomain;//可改成您自己的域名
HttpContext.Current.Response.Cookies.Add(cookie);
}
}
}
【购物车操作类ShoppingCar.cs-操作购物车信息】
///<summary>
///购物车操作类(COOKIE管理)
///</summary>
public class ShoppingCar
{
///<summary>
/// COOKIE键
///</summary>
private const string cookiekey = "MM_SHOPCART";
/
//<summary>
///添加到购物车(若购物车有此商品,在原有数量增加,没有直接增加)
///</summary>
///<param name="sp">商品</param>
///<param name="expires">保存天数</param>
public static void Add(CarProduct sp, int expires)
{
IList<CarProduct> tmplist = Get();
//获得购物车现有商品集合,若没有新增
if (tmplist != null && tmplist.Count > 0)
{
/
/获取当前商品
CarProduct tmpcarpinfo = tmplist.FirstOrDefault(cp => cp.Id == sp.Id & cp.Property.Equals(sp.Property));
//若存在则更改数量,反之新增到集合中去
if (tmpcarpinfo != null && tmpcarpinfo.Id > 0)
{
tmplist.Remove(tmpcarpinfo);
tmpcarpinfo.Num += sp.Num;
}
else
{
tmpcarpinfo = new CarProduct();
tmpcarpinfo.Id = sp.Id;
tmpcarpinfo.Property = sp.Property;
tmpcarpinfo.Num = sp.Num;
}
tmplist.Add(tmpcarpinfo);
}
else
{
CarProduct newcarpinfo = new CarProduct();
newcarpinfo.Id = sp.Id;
newcarpinfo.Property = sp.Property;
newcarpinfo.Num = sp.Num;
tmplist.Add(newcarpinfo);
}
Utils.WriteCookie(cookiekey, Utils.Obj2Json(tmplist), expires * 24 * 60 * 60);        }
///<summary>
///添加到购物车(一次性添加多条-若购物车有此ID商品,在原有数量增加,没有直接增加)
///</summary>
///<param name="plist">商品集合</param>
///<param name="expires">保存天数</param>
public static void Add(IList<CarProduct> plist, int expires)
{
IList<CarProduct> tmplist = Get();
//获得购物车现有商品集合,若没有新增
if (tmplist != null && tmplist.Count > 0)
{
foreach (var tmpd in plist)
{
//获取当前商品
CarProduct tmpcarpinfo = tmplist.FirstOrDefault(cp => cp.Id == tmpd.Id & cp.Property.Equals(tmpd.Property));
//若存在则更改数量,反之新增到集合中去
if (tmpcarpinfo != null && tmpcarpinfo.Id > 0)
{
tmplist.Remove(tmpcarpinfo);
tmpcarpinfo.Num += tmpd.Num;
}
else
{
tmpcarpinfo = new CarProduct();
tmpcarpinfo.Id = tmpd.Id;
tmpcarpinfo.Property = tmpd.Property;
tmpcarpinfo.Num = tmpd.Num;
}
tmplist.Add(tmpcarpinfo);
}
}
else
{
tmplist = plist;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。