·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> ASP.NET之电子商务系统开发-2(购物车功能)

ASP.NET之电子商务系统开发-2(购物车功能)

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

asp.net之电子商务系统开发-2(购物车功能)

一、前言

继上次的首页数据列表后,这是第二篇。记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的。

二、开始

首先看一下购物车流程及对应代码。

1.如果购物车为空,就显示

 

购物车为空

其方法是创建两个大的div层,当你没有购买商品时,就显示这层,里面啥都没有,如果你点击了一个商品加入购物车,就会将这层隐藏,显示存放刚放入购物车商品信息的那一层,其控制方法如下:

DataSet ds = bllShopCar.ShopCarQT(Request.Cookies["ShopUser"].Value);                if (ds.Tables[0].Rows.Count > 0)                {                    havegoodsbox1.Visible = true;                    RadListView1.DataSource = ds;                    RadListView1.DataBind();                }                else                {                    nocarbox.Visible = true;                }

第一行先dataset一下,ShopCarQT是一个方法:

public DataSet ShopCarQT(string strWhere)        {            StringBuilder strSql = new StringBuilder();            strSql.Append("select * from ShopCar left join GoodsInfo on [ShopCar].[Goods_ID] = [GoodsInfo].[Goods_ID] where [ShopUser] = '");            if (strWhere.Trim() != "")            {                strSql.Append(strWhere + "'");            }            return DbHelperSQL.Query(strSql.ToString());        }

Shopcar是购物车表,GoodsInfo 是商品信息表,看一下表设计:

)Z5Q39($2P432O%NTBMT{CQ这是Shopcar,

 

8A`4)EH(@P1VA}$)~_1}2KR这是GoodsInfo。其中ShopCar中的ShopUser存放的是一个cookie,当你选中商品加入购物车时,除了商品信息会插入ShopCar,还有一个ShopUser会插入:

}ROWA76}D`%8W[OM7JKY`9Q

其代码是在后台创建cookie:

if (Request.Cookies["ShopUser"] == null || Request.Cookies["ShopUser"].Value == "")            {                Response.Cookies["ShopUser"].Value = DateTime.Now.ToString("yyyyMMddhhmmssfff");                Response.Cookies["ShopUser"].Expires = DateTime.Now.AddYears(1);            }

接着ShopUser会生成一个cookie存到后台并且这个值会放入数据库中。再回到上面的方法,方法里面将这两张表根据ShopUser,select了一下。然后下一行是if判断,如果数据库里面没有数据,nocarbox的值就是true,其中nocarbox 就是上面的层,显示的是“您的购物车还是空的”;如果有数据,havegoodsbox1 的值就是true,这是购物车中有商品的层,显示出来差不多是这样

F%5AQCJ%)EY%J_[F}X~PC2B

2.一些细节

首先,用一台电脑购物时,存放在ShopUser的cookie值是一样的,比如我这台电脑,将两个商品加入购物车:

FFY88GBQ1S){TNETCSDR[KF

只要是同一台电脑,他的ShopUser都是一样的,但是Goods_ID,不可能相同,如过你添加同一个商品到购物车就会这样:

7)0}2$(~`T)~%L@_WG%5{$S

这是相同ShopUser下,Goods_ID不能相同,还有一种就是不同ShoUser情况的,Goods_ID可以相同,也就是不同电脑添加相同商品不会产生冲突问题。具体添加商品的判断语句如下:

if (bllshopcar.GetRecordCount2("[Goods_ID] = " + Request["id"] , "[ShopUser] = " + Request.Cookies["ShopUser"].Value) !=0 )                        {                             Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('不能添加重复商品!');location.replace(location.href);</script>");                        }                        else                        {                                molshopcar.ShopUser = Request.Cookies["ShopUser"].Value;                                molshopcar.Goods_ID =Int32.Parse((Request["id"]));                                int Money;                                Money = Convert.ToInt32(this.qty_item_1.Text) * Convert.ToInt32(this.lblgoods_GBPRice.Text);                                molshopcar.Goods_Money = Money;                                molshopcar.Goods_Name = lblgoods_name.Text;                                molshopcar.Goods_Num = Convert.ToInt32(qty_item_1.Text);                                bllshopcar.Add(molshopcar);                                Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('加入购物车成功!'); </script>");                        }

其中GetRecordCount2 是一个方法,相同IP,也就是ShopUser相同的情况下,商品是否重复:

/// <summary>/// 判断购物车商品是否重复/// </summary>         public int GetRecordCount2(string str1,string str2)        {            StringBuilder strSql = new StringBuilder();            strSql.Append("select count(1) FROM ShopCar ");            if (str1.Trim() != "" || str2.Trim() != "")            {                strSql.Append(" where " + str1 + "and " + str2);            }            object obj = DbHelperSQL.GetSingle(strSql.ToString());            if (obj == null)            {                return 0;            }            else            {                return Convert.ToInt32(obj);            }        }

如果全部成功,就add一下,到ShopCar表中。

3.购物车中商品信息修改

这块我弄了很久,因为在Radlistview 中(其实不止Radlistview,其他像什么Gridview估计也是这种情况),所有官方控件比如button,textbox之类的,全部失效,后台获取不到它们的ID,因此你要是修改商品的信息,例如数量,就会显的非常麻烦,琢磨了好久之后终于用js实现了。

T1%FBUCHF8B~]Z9481M[M6C

这方法不像那种淘宝里面的,直接+/-,那方法至今没搞懂怎么获取值。这方法当你输入数量后,点击确定,他就根据数量修改该商品小计和下面的合计金额。在代码中,他会首先获取输入的值,只需要在前台写一个简单的js就可以了,代码如下:

function change(js_shopcarid)               {                   var goodsnum = prompt("请输入数量", "");//将输入的数量赋值给num                   if(goodsnum < 0 )                   {                       alert("请输入正确数值");                   }                  else  if (goodsnum)                   {                       alert("修改成功!");                       document.cookie = "jsshopcarid=" + js_shopcarid;                       document.cookie = "goodsnum=" + goodsnum;                       var btn = document.getElementById("Button3");                       btn.click();