Webform购物车(用Session存储,页面传值)

购物车主要实现的功能:

①在主页面可以将所有商品显示出来,包括价格,库存。

②点击购买可以累加产品,如果是同一种产品,只会累加每种产品的数量。

③查看购物车,可以查看明细,包括所购物品的名称,价格,数量等等。由于这里的OrderDetails表没有水果名称和价格,所以需要扩展(Paitial)OrderDetails属性。

④在购物车中可以下订单,当点击下订单的时候,需要判断是否已经登录,如果没有登录,则跳到登录页面。

⑤下订单之后,客户的余额减少幅度等于所消费幅度。

  ⑥余额不足,提示。

⑦库存不足,提示。

⑧购物车清空。

⑨库存产品数量减少,减少的每种产品的数量等于购买的每种产品的数量。

下面用代码来详细介绍一下购物车功能的实现:

①Main页面,实现功能①,显示所有物品。

aspx代码:

 1 <body>
 2     <form id="form1" runat="server">
 3     <div>
 4         <h1>大苹果购物网</h1>
 5         <p>&nbsp;</p>
 6
 7         <div style="float:left; width:150px; height:500px;">
 8
 9             <br />
10             <br />
11             <br />
12             <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton>
13             <br />
14             <br />
15             <br />
16             <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton>
17             <br />
18             <br />
19             <br />
20             <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton>
21
22         </div>
23         <div style =" float:left; height:500px;">
24
25             <asp:Repeater ID="Repeater1" runat="server">
26                    <HeaderTemplate>
27                         <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF">
28                           <tr>
29                             <td height="25" bgcolor="#FFFFFF">代号</td>
30                             <td bgcolor="#FFFFFF">水果名称</td>
31                             <td bgcolor="#FFFFFF">水果价格</td>
32                             <td bgcolor="#FFFFFF">源产地</td>
33                             <td bgcolor="#FFFFFF">库存</td>
34                             <td bgcolor="#FFFFFF">操作</td>
35                           </tr>
36                    </HeaderTemplate>
37                     <ItemTemplate>
38
39                             <tr>
40                                 <td height="25" bgcolor="#FFFFFF"><%#Eval("Ids") %></td>
41                                 <td bgcolor="#FFFFFF"><%#Eval("Name") %></td>
42                                 <td bgcolor="#FFFFFF"><%#Eval("Price") %></td>
43                                 <td bgcolor="#FFFFFF"><%#Eval("Source") %></td>
44                                 <td bgcolor="#FFFFFF"><%#Eval("Numbers") %></td>
45                                 <td bgcolor="#FFFFFF"><a href="ChuLi.aspx?code=<%#Eval("Ids") %>">购买</a></td>
46                               </tr>
47                     </ItemTemplate>
48                 <FooterTemplate>
49                       </table>
50                 </FooterTemplate>
51             </asp:Repeater>
52
53             <br />
54
55             <br />
56             <asp:Label ID="lblTs" runat="server"></asp:Label>
57
58         </div>
59
60
61     </div>
62     </form>
63 </body>

aspx.cs代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7
 8 public partial class Main : System.Web.UI.Page
 9 {
10     protected void Page_Load(object sender, EventArgs e)
11     {
12         if (!IsPostBack)
13         {
14             if (Session["uid"] != null)
15             {
16                 FirutDataContext context = new FirutDataContext();
17
18                 Repeater1.DataSource = context.Fruit;
19                 Repeater1.DataBind();
20
21                 if (Session["Cart"] != null)
22                 {
23                     List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;
24
25                     int sl = list.Count();
26                     decimal zj = Convert.ToDecimal( list.Sum(p => p.Count * p.JiaGe));
27
28                     lblTs.Text = "购物车中有:"+sl+"件商品,总价为:"+zj+"元。";
29
30                 }
31
32             }
33             else
34             {
35                 Response.Redirect("DengLu.aspx");
36             }
37         }
38     }
39     protected void LinkButton1_Click(object sender, EventArgs e)
40     {
41         Response.Redirect("Main.aspx");
42     }
43     protected void LinkButton2_Click(object sender, EventArgs e)
44     {
45         Response.Redirect("YuE.aspx");
46     }
47     protected void LinkButton3_Click(object sender, EventArgs e)
48     {
49         Response.Redirect("GouWuChe.aspx");
50     }
51 }

②实现功能②,点击购买时,存放在session[]里面(由于只是实现购买功能,不显示页面,所以只写方法)

aspx.cs代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7
 8 public partial class ChuLi : System.Web.UI.Page
 9 {
10     protected void Page_Load(object sender, EventArgs e)
11     {
12         //接收购买的水果代号
13          string code = Request["code"].ToString();
14        //先判断购物车是否为空
15      //如果不为空,再进入查询购物车包不包含本产品,不包含直接添加,包含,值增加数量;
16         if (Session["Cart"] != null)
17         {
18             //把SESSION[]购物车的数值转化为集合
19             List<OrderDetails> listall = Session["Cart"] as List<OrderDetails>;
20            //按照点击购买时传过来的水果代号查询
21             var query = listall.Where(p => p.FruitCode == code);
22             //如果购物车购买过本水果产品,实现购买,数量加1
23             if (query.Count() > 0)
24             {
25                 OrderDetails data1 = query.First();
26                 //listall.Remove(data1);
27                 data1.Count = data1.Count + 1;
28                 //listall.Add(data1);
29
30                 Session["Cart"] = listall;
31
32             }
33            //如果没有购买过本水果产品,新建集合,存储购买的水果
34             else
35             {
36                 OrderDetails data2 = new OrderDetails();
37
38                 data2.FruitCode = code;
39                 data2.Count = 1;
40
41                 listall.Add(data2);
42
43                 Session["Cart"] = listall;
44             }
45
46
47
48         }
49       //如果购物车是空的,直接购买本产品
50         else
51         {
52             FirutDataContext context = new FirutDataContext();
53
54             List<OrderDetails> list = new List<OrderDetails>();
55
56             OrderDetails data = new OrderDetails();
57
58             data.FruitCode = code;
59             data.Count = 1;
60
61             list.Add(data);
62
63             Session["Cart"] = list;
64
65
66         }
67        //跳会主页面
68         Response.Redirect("Main.aspx");
69
70     }
71 }

③实现功能③,查看购物车,首先OrderDetails表没有水果名称和价格,显扩展属性;

扩展属性代码:

 1 public partial class OrderDetails
 2 {
 3     private decimal jiaGe;
 4
 5     public decimal JiaGe
 6     {
 7         get
 8         {
 9             FirutDataContext context = new FirutDataContext();
10
11             var query = context.Fruit.Where(p=>p.Ids == FruitCode);
12
13             Fruit data = query.First();
14
15
16             return  data.Price.Value;
17         }
18         set { jiaGe = value; }
19     }
20
21     private string shangPinName;
22
23     public string ShangPinName
24     {
25         get {
26             FirutDataContext context = new FirutDataContext();
27
28             var query = context.Fruit.Where(p => p.Ids == FruitCode);
29
30             Fruit data = query.First();
31
32
33             return data.Name;
34         }
35         set { shangPinName = value; }
36     }
37
38
39
40 }

购物车效果图:

aspx代码:

 1 <body>
 2     <form id="form1" runat="server">
 3    <div>
 4         <h1>购物车</h1>
 5         <p>&nbsp;</p>
 6
 7         <div style="float:left; width:150px; height:500px;">
 8
 9             <br />
10             <br />
11             <br />
12             <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton>
13             <br />
14             <br />
15             <br />
16             <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton>
17             <br />
18             <br />
19             <br />
20             <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton>
21
22         </div>
23         <div style =" float:left; height:500px;">
24
25
26
27
28
29
30             <asp:Repeater ID="Repeater1" runat="server">
31                    <HeaderTemplate>
32                         <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF">
33                           <tr>
34                             <td height="25" bgcolor="#FFFFFF">商品名称</td>
35                             <td bgcolor="#FFFFFF">商品单价</td>
36                             <td bgcolor="#FFFFFF">购买数量</td>
37                             <td bgcolor="#FFFFFF">操作</td>
38                           </tr>
39                    </HeaderTemplate>
40                     <ItemTemplate>
41
42                             <tr>
43                                 <td height="25" bgcolor="#FFFFFF"><%#Eval("ShangPinName") %></td>
44                                 <td bgcolor="#FFFFFF"><%#Eval("JiaGe") %></td>
45                                 <td bgcolor="#FFFFFF"><%#Eval("Count") %></td>
46                                 <td bgcolor="#FFFFFF"><a href="ShanChu.aspx?code=<%#Eval("FruitCode") %>">删除</a></td>
47                               </tr>
48                     </ItemTemplate>
49                 <FooterTemplate>
50                       </table>
51                 </FooterTemplate>
52             </asp:Repeater>
53
54             <br />
55
56             <br />
57             <asp:Label ID="lblTs" runat="server" ForeColor="#CC0000"></asp:Label>
58
59             <br />
60             <br />
61             <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交订单" />
62             <br />
63             <br />
64             <asp:Label ID="lblSure" runat="server" ForeColor="#CC0000"></asp:Label>
65             <br />
66
67         </div>
68
69
70     </div>
71     </form>
72 </body>

aspx.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class GouWuChe : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
             //先判断购物车是否为空,不为空显示购物车内容,如果为空进行提示
            if (Session["Cart"] != null)
            {
                List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;
                Repeater1.DataSource = list;
                Repeater1.DataBind();

            }
            else
            {
                lblTs.Text = "购物车中没有任何商品!";
            }

        }
    }

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Main.aspx");
    }
    protected void LinkButton2_Click(object sender, EventArgs e)
    {
        Response.Redirect("YuE.aspx");
    }
    protected void LinkButton3_Click(object sender, EventArgs e)
    {
        Response.Redirect("GouWuChe.aspx");
    }
    //点击提交按钮时,先看验证库存是否足够,用户是否登陆,当二者都满足时,然后在进数据库执行删除
    protected void Button1_Click(object sender, EventArgs e)
    {
        List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;

        FirutDataContext context = new FirutDataContext();

        bool IsOk = true;//定义BOOL类型的变量
       //先验证库存,购物车的商品分别进入数据库进行查询,看看库存满足不
        foreach (OrderDetails data in list)
        {
            int sl = data.Count.Value;

            var query = context.Fruit.Where(p=>p.Ids == data.FruitCode);

            int kc = query.First().Numbers.Value;
           //判断购买的数量和库存数量
            if (sl <= kc)
            {
                IsOk = IsOk && true;
            }
            else
            {
                IsOk = IsOk && false;
                lblSure.Text += query.First().Name +"的库存不足! ";
            }

        }
        //如果库存满足,再进行验证用户是否登录
        if (IsOk)
        {
            //如果用户登录成功,再判断该用户的余额是否满足购买商品的总额
            if (Session["uid"] != null)
            {
                string uid = Session["uid"].ToString();

                var query = context.Login.Where(p=>p.UserName == uid);

                decimal ye = query.First().Account.Value;

                decimal zj = list.Sum(p => p.JiaGe * p.Count).Value;

              //如果余额满足,再进行减数量,减余额,添加订单详情表
                if (ye >= zj)
                {
                    //减库存
                    foreach (OrderDetails data in list)
                    {
                        int sl = data.Count.Value;

                        var query2 = context.Fruit.Where(p => p.Ids == data.FruitCode);

                        query2.First().Numbers = query2.First().Numbers.Value - data.Count;

                        context.SubmitChanges();

                    }

                    //减余额
                    var query3 = context.Login.Where(p=>p.UserName == uid);
                    query3.First().Account = query3.First().Account.Value - zj;
                    context.SubmitChanges();

                    //添加订单
                    Orders data1 = new Orders();

                    Random r = new Random();

                    string ordercode = DateTime.Now.ToString("yyyyMMddHHmmssms") + r.Next(100).ToString();

                    data1.Code = ordercode;
                    data1.UserName = uid;
                    data1.OrderTime = DateTime.Now;

                    context.Orders.InsertOnSubmit(data1);
                    context.SubmitChanges();

                    //添加订单详情表

                    foreach (OrderDetails data in list)
                    {
                        data.OrderCode = ordercode;

                    }
                    context.OrderDetails.InsertAllOnSubmit(list);
                    context.SubmitChanges();

                }
             //如果余额不满足,进行提示
                else
                {
                    lblSure.Text +="余额不足!";
                }
            }
            else
            {
                Response.Redirect("DengLu.aspx");
            }

        }

    }
}

购物车中有删除功能,不需要显示页面,只执行删除方法,代码如下::

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ShanChu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;

        string code = Request["code"].ToString();

        var query = list.Where(p => p.FruitCode == code);

        if (query.First().Count.Value > 1)
        {
            query.First().Count--;
        }
        else
        {
            list.Remove(query.First());
        }

        Session["Cart"] = list;

        Response.Redirect("GouWuChe.aspx");

    }
}

④实现用户登录功能:

aspx代码:

<body>
    <form id="form1" runat="server">
          <center>
    <div>

        <asp:Label ID="Label1" runat="server" Text="用户名:"></asp:Label>
        <asp:TextBox ID="txtuid" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Label ID="Label2" runat="server" Text="密码:"></asp:Label>
&nbsp;
        <asp:TextBox ID="txtpwd" runat="server" TextMode="Password"></asp:TextBox>
        <br />
        <br />
        <asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />

        <br />
        <br />

    </div>
            </center>
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </form>

</body>
时间: 2024-08-06 23:04:54

Webform购物车(用Session存储,页面传值)的相关文章

webform 页面传值的方法总结

ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer. 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于

webform(六)内置对象 跨页面传值

内置对象跨页面传值有六种:Request,Response,Session,Cookie,Application,VIewState. 一.Request和ResponseRequest request请求对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息.客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据.request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项.response 响应对象在

webform文本框 、显示文字、按钮、跳转页面、页面传值

1.TextBox:用户输入文本框 单行文本框 多行文本框 密码框2.显示文字:lable会生成Span标签 literall将文字原封不动的打到页面3.按钮:Button普通按钮 ImageButton图片按钮 LinkButton超链接按钮4.Image:图片工具 HyperLink:超链接工具 跳转页面:1.Response.Redirect("url"); //重定向页面,可以跳转任何页面2.Server.Transfer("url"); //重新请求页面,

WebForm 页面传值

一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了.下面通过一个小例子来完成传值工作,步骤如下: 1.创建一个web form 2.在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 3.为button按钮创建click事件 代码如下:private void butt

webform页面传值和删除修改

一.webform跨页面传值1.内置对象地址栏数据拼接 QueryString 优点:简单好用:速度快:不消耗服务器内存. 缺点:只能传字符串:保密性差(调转页面后在地址栏显示):长度有限.响应请求对象 Response获取请求对象 Request(1)跳转页面 Response.Redirect(path);//重定向,可以跳转任何网页 Rerver.Trandfer(path);//跳转后地址栏的网址不改变,只能跳转该网站根目录下的网站 Respone.Write("<script&g

WebForm 【复合控件】【跳转页面,跨页面传值】

按钮类button - 无submit - Buttonreset - 无image - ImageButton 选择类radioRadioButtonList - 布局里三个ListItem Enable selected Text Value checkboxCheckBoxList - 布局里三个ListItem Enable selected Text Value 绑定数据有两种方式:DataSource 遍历创建ListItem 取值两种单选 可以使用selectedItem 多选要使

WebForm 跨页面传值

跨页面传值 内置对象:QueryString - 地址栏数据拼接 ?key=value 优点: 简单好用,速度快,不消耗服务器内存缺点: 只能传字符串 保密性不好 长度有限 Response - 响应请求对象 Response.Redirect(path); - 重定向 Response.Write(" aaaa "); -输出内容 Server.Transfer(path); Request - 获取请求对象 Request["key"] - 默认返回的就是str

【2017-05-21】WebForm跨页面传值取值、C#服务端跳转页面、 Button的OnClientClick属性、Js中getAttribute和超链接点击弹出警示框。

一.跨页面传值和取值: 1.QueryString - url传值,地址传值 优缺点:不占用服务器内存:保密性差,传递长度有限. 通过跳转页面路径进行传值,方式: href="地址?key=value&key=value"            用&可以实现传递多个值. 通过这种方式就把要传递的值传到要跳转的页面去了. 2.跨页面取值: 在跳转到的页面的C#代码服务端进行取值 用:  string value = Request["key"]; 二.

webform的跨页面传值、客户端的页面跳转、超链接

一.跨页面传值和取值: 1.QueryString - url传值,地址传值 优缺点:不占用服务器内存:保密性差,传递长度有限. 通过跳转页面路径进行传值,方式: href="地址?key=value&key=value"            用&可以实现传递多个值. 通过这种方式就把要传递的值传到要跳转的页面去了. 2.跨页面取值: 在跳转到的页面的C#代码服务端进行取值 用: string value = Request["key"]; 二.客

页面传值的几种方式

1.使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案.使用这种方法的步骤如下: 1,使用控件创建web表单(form) 2,创建可以返回表单的按钮和链接按钮 3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量 4,在保存的URL里添加QueryString参数