Asp.net基于session实现购物车的方法

本文实例讲述了asp.net基于session实现购物车的方法。分享给大家供大家参考,具体如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

//加入购物车

protected void LinkButton2_Click(object sender, EventArgs e)

{

  DataTable dt = null;

  //用户购买商品 如果 没有登录 则提示登录

  if (Session["userName"] == null)

  {

   Common.MessageBox.ShowAndRedirectTo(this.Page, "请先登录 再购买商品!", "Login.aspx");

  }

  else

  {

   //如果己经登录 则根据接收过来的商品编号 根据该商品编号来获取该商品的详细信息(返回实体类)

   //返回信息有 商品编号 商品名称 商品市场价 商品的大小(siz) 图片(image) 重量 总价 购买数量 总共要支付的钱 商品总重量

   Model.product model = new Model.product();

   //根据商品编号 获取该商品详细信息

   model.id =(int) Request.QueryString.GetValues("uid")[0];

   System.Data.SqlClient.SqlDataReader sdr=DAL.product.drpr(model);

   if (Session["ShopCar"] == null)

   {

    dt = new DataTable();

    //商品编号

    dt.Columns.Add("id", typeof(Int32));

    //商品价格(本站价格)

    dt.Columns.Add("localprice", typeof(Double));

    //商品发布价格

    dt.Columns.Add("posttime", typeof(String));

    //购买数量

    dt.Columns.Add("buycount", typeof(Int32));

    //商品总价

    dt.Columns.Add("sumprice", typeof(Int32));

    //颜色

    dt.Columns.Add("color", typeof(String));

    //商品大小

    dt.Columns.Add("size", typeof(String));

    //商品名称

    dt.Columns.Add("title", typeof(String));

    //商品类型

    dt.Columns.Add("cate", typeof(String));

    //商品图片

    dt.Columns.Add("image", typeof(String));

    //商品时间

    dt.Columns.Add("only", typeof(String));

    //商品重量

    dt.Columns.Add("weight", typeof(String));

    //商品总重量

    dt.Columns.Add("sumweight", typeof(String));

   }

   else

   {

    //如果购物车不为空时 刚判断 该商品的信息是否存在购物车中 如果 存在则 把该商品的数量加上1

    dt = Session["ShopCar"] as DataTable;

    for (int j = 0; j < dt.Rows.Count; j++)

    {

     //如果读到该商品的编号 则该商品己经存在 则将该商品的数量加1

     if (dt.Rows[j]["id"].ToString() = model.id.ToString() && Convert.ToString(dt.Rows[i]["color"]) == d_color.Text)

     {

      //如果商品 己经存在 则购买数量加上1

      dt.Rows[j]["buycount"] = Convert.ToInt32(dt.Rows[j]["buycount"]) + 1;

      //Session保存购物车

      Session["ShopCar"] = dt;

      Response.Redirect("ShoppingCar.aspx");

      return;

     }

    }

   }

   //如果该商品信息不存在 购物车中 则添加一个新的商品信息

   DataRow row = dt.NewRow();

   if (dr.Read())

   {

    //商品的重量

    row["weight"] = sdr["_weight"].ToString();

    //商品的总重量

    row["sumweight"] = sdr["_weight"].ToString();

    //商品购买 时间

    row["only"] = DateTime.Now.ToString("yyyyMMddhhmmssfff");

    //商品型号

    row["size"] = _size.Text;

    //商品图片

    row["image"] = Image_1.ImageUrl;

    //商品类型名称

    row["cate"] = cate_name.Text;

    //商品名称

    row["title"] = title_l.Text;

    //商品颜色

    row["color"] = d_color.Text;

    //商品编号

    row["id"] = Convert.ToInt32(dr["_id"].ToString());

    //商品本站价格

    row["localprice"] = Convert.ToDouble(sdr["_localprice"].ToString());

    //商品发布时间

    row["posttime"] = Convert.ToString(sdr["_posttime"].ToString());

    //购买数量 默认为1

    row["buycount"] = 1;

    //商品总价

    row["sumprice"] = Convert.ToDouble(sdr["_localprice"].ToString());

    dt.Rows.Add(row);

   }

   dr.Close();

   //保存商品信息

   Session["dt"] = dt;

   Response.Redirect("shoplist.aspx");

  }

}

//获取商品信息 (商品总重量 总价格)

private void GetCountInfo()

{

  DataTable dt = null;

  if (Session["ShopCar"] != null)

  {

   //显示提示信息

   Label1.Visible = true;

  }

  else

  {

   dt = Session["ShopCar"] as DataTable;

   for (int j = 0; j < dt.Rows.Count; j++)

   {

    //获取单个商品的总价(计算公式:商品的数量 乘以商品的价格)

    dt.Rows[j]["sumprice"] = Convert.ToInt32(dt.Rows[j]["localprice"]*Convert.ToInt32(dt.Rows[j]["buycount"]));

    //获取单个商品的总重量 (计算公式:购买的商品数量 乘以商品的单个重量)

    dt.Rows[j]["sumweight"] = Convert.ToInt32(dt.Rows[j]["weight"] * Convert.ToInt32(dt.Rows[j]["buycount"]));

    //保存信息

    Session["ShopCar"] = dt;

    //显示用户购物车的所有商品信息

    ShowShoppingCarInfo();

   }

  }

}

/// <summary>

/// 显示购买的商品信息

/// </summary>

private void ShowShoppingCarInfo()

{

  DataTable dt = null;

  //定义获取商品总价格 变量

  double wholePrice = 0;

  //定义获取商品的总重量 变量

  double wholeWeight = 0;

  //用户己经购买

  if (Session["ShopCar"] != null)

  {

   dt = Session["ShopCar"] as DataTable;

   for (int j = 0; j < dt.Rows.Count; j++)

   {

    //获取所有商品 总价格

    wholePrice += Convert.ToDouble(dt.Rows[j]["sumprice"]);

    //获取商品的 总重量

    wholeWeight += Convert.ToDouble(dt.Rows[j]["sumweight"]);

   }

   //总价格

   wprice.Text = wholeprice.ToString();

   //总重量

   wweight.Text = wholeweight.ToString();

   //保存商品总价格

   Session["wholeprice"] = wholeprice;

   //保存商品 总重量

   Session["wholeweight"] = wholeweight;

   //商品总项数

   wholeprocount.Text = Convert.ToString(dt.Rows.Count);

   //保存商品的总项

   Session["wholeprocount"] = wholeprocount.Text;

   //如果项数为空时

   if (dt.Rows.Count == 0)

   {

    //显示用户未购买商品

    Label1.Visible = true;

   }

  }

  else

  {

   //如果没有购买商品 则显示提示信息

   Label1.Visible = true;

   GridView1.DataSource = null;

   GridView1.DataBind();

  }

}

从购物车移除一件商品:Row_Command

?


1

2

3

4

5

6

7

8

9

10

if(e.CommandName=="del")

{

  DataTable dt=Session["ShopCar"] as DataTable;

  for(int j=0;j<dt.Rows.count;j++){

   if(dt.Rows[j]["only"]==e.CommandArgument)

   {

    dt.Rows.Remove(j);

   }

  }

}

希望本文所述对大家asp.net程序设计有所帮助。

时间: 2024-10-09 03:58:07

Asp.net基于session实现购物车的方法的相关文章

asp.net session丢失的解决方法小结

现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: < sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' time

asp中设置session过期时间方法总结

http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载 asp中默认session过期时间为20分钟,很多情况下不够,今天有客户要求很多就要重新登录了,所以准备了这篇文章,方便需要的朋友 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改 时间设置要放在前面

ASP.NET购物车实现方法

1.可以参考PetShop中的购物车实现方法 2.[经典示例分享]— 商城购物车设计(VS+Access)附源码 http://www.cnblogs.com/wenyang-rio/archive/2012/11/02/2750898.html

基于session的简易购物车引发的问题

一.功能描述:  页面如下所示: 运行报错: java.io.FileNotFoundException: E:\apache-tomcat-8.0.37\work\Catalina\localhost\20161013ShoppingCart\SESSIONS.ser (系统找不到指定的路径.)at java.io.FileOutputStream.open0(Native Method)at java.io.FileOutputStream.open(FileOutputStream.jav

ASP.NET MVC学前篇之扩展方法、链式编程

前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的是外围的知识,有的是包含在框架内的. MVC学前篇字样?有噱头的成分也有真实的成分,所以工欲善其事,必先利其器.器是什么?基础嘛,虽然说MVC框架中涉及到的知识很多很多也不是我一篇两篇能说完的,我能做的就是知道多少就跟大家分享多少,当然了随着时间的推移会完善这个系列. 1扩展方法 扩展方法是C# 3.0特性里的知识,它用在最多的地方是在Linq中,

ASP.NET(C#)常用数据加密和解密方法汇总

一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应用和学习 1.  媒体加密:DRM 2.  文件加密:文本加密.pdf.word 3.  数据加密:ASP.NET(C#)中的数据加密 4.  硬件加密:加密狗 三.            数据加密的发展趋势 四.            网络数据加密算法分类 1.  根本不考虑解密问题:MD5. 2.  私用密钥加密:DES.AES 3.  公用密钥加密:

【转】asp.net Cookie值中文乱码问题解决方法

来源:脚本之家.百度空间.网易博客 http://www.jb51.net/article/34055.htm http://hi.baidu.com/honfei http://tianminqiang.blog.163.com/blog/#m=0 ============================================================================== cookie中怎么保存中文 在用cookie保存用户名的时候,发现cookie值不能存中文

基于session 的springMvc 国际化

项目中采用springMvc的框架,需要动态切换语言,找了一些资料,最后决定采用基于session的动态切换,实现动态切换中文,英文,韩文,其实就是把中文翻译成其他语言显示 springMvc国际化包括两个方面,一个是前台页面的国际化,spring有自己的标签可以去实现,非常方便,另一个是后台java代码种涉及中文的国际化. 1.项目总体结构 有关bean的主要配置在spring-mvc.xml里配置,messages文件夹里放的是需要翻译的内容格式如下:key  =  value 的格式 英文

Asp.net 实现Session分布式储存(Redis,Mongodb,Mysql等) sessionState Custom

对于asp.net 程序员来说,Session的存储方式有InProc.StateServer.SQLServer和Custom,但是Custom确很少有人提及.但Custom确实最好用,目前最实用和最灵活一种方式,因为Custom可以实现各种情况的Session存储,特别对于大型网站尤为重要,解决Session丢失和Session效率的最佳实现方式,也是实现单点登录的最佳途径. 对于InProc.StateServer和SQLServer各自优缺点,网上一大堆,这里就不做详解. 重要的两点 1