首页 > Web开发 > 详细

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

时间:2016-02-26 23:33:35      阅读:455      评论:0      收藏:0      [点我收藏+]

购物车主要实现的功能:

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

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

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

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

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

  ⑥余额不足,提示。

    ⑦库存不足,提示。

    ⑧购物车清空。

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

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

   技术分享

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

技术分享

 

aspx代码:

<body>
    <form id="form1" runat="server">
    <div>
        <h1>大苹果购物网</h1>
        <p> </p>
        
        <div style="float:left; width:150px; height:500px;">

            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton>
            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton>
            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton>

        </div>
        <div style =" float:left; height:500px;">

            <asp:Repeater ID="Repeater1" runat="server">
                   <HeaderTemplate>
                        <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF">
                          <tr>
                            <td height="25" bgcolor="#FFFFFF">代号</td>
                            <td bgcolor="#FFFFFF">水果名称</td>
                            <td bgcolor="#FFFFFF">水果价格</td>
                            <td bgcolor="#FFFFFF">源产地</td>
                            <td bgcolor="#FFFFFF">库存</td>
                            <td bgcolor="#FFFFFF">操作</td>
                          </tr>
                   </HeaderTemplate>
                    <ItemTemplate>

                            <tr>
                                <td height="25" bgcolor="#FFFFFF"><%#Eval("Ids") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Name") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Price") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Source") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Numbers") %></td>
                                <td bgcolor="#FFFFFF"><a href="ChuLi.aspx?code=<%#Eval("Ids") %>">购买</a></td>
                              </tr>
                    </ItemTemplate>
                <FooterTemplate>
                      </table>
                </FooterTemplate>
            </asp:Repeater>

            <br />

            <br />
            <asp:Label ID="lblTs" runat="server"></asp:Label>

        </div>

    
    </div>
    </form>
</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 Main : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["uid"] != null)
            {
                FirutDataContext context = new FirutDataContext();

                Repeater1.DataSource = context.Fruit;
                Repeater1.DataBind();

                if (Session["Cart"] != null)
                {
                    List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;

                    int sl = list.Count();
                    decimal zj = Convert.ToDecimal( list.Sum(p => p.Count * p.JiaGe));

                    lblTs.Text = "购物车中有:"+sl+"件商品,总价为:"+zj+"元。";

                }

            }
            else
            {
                Response.Redirect("DengLu.aspx");
            }
        }
    }
    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");
    }
}

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

aspx.cs代码:

 

<body>
    <form id="form1" runat="server">
    <div>
        <h1>大苹果购物网</h1>
        <p> </p>
        
        <div style="float:left; width:150px; height:500px;">

            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton>
            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton>
            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton>

        </div>
        <div style =" float:left; height:500px;">

            <asp:Repeater ID="Repeater1" runat="server">
                   <HeaderTemplate>
                        <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF">
                          <tr>
                            <td height="25" bgcolor="#FFFFFF">代号</td>
                            <td bgcolor="#FFFFFF">水果名称</td>
                            <td bgcolor="#FFFFFF">水果价格</td>
                            <td bgcolor="#FFFFFF">源产地</td>
                            <td bgcolor="#FFFFFF">库存</td>
                            <td bgcolor="#FFFFFF">操作</td>
                          </tr>
                   </HeaderTemplate>
                    <ItemTemplate>

                            <tr>
                                <td height="25" bgcolor="#FFFFFF"><%#Eval("Ids") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Name") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Price") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Source") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Numbers") %></td>
                                <td bgcolor="#FFFFFF"><a href="ChuLi.aspx?code=<%#Eval("Ids") %>">购买</a></td>
                              </tr>
                    </ItemTemplate>
                <FooterTemplate>
                      </table>
                </FooterTemplate>
            </asp:Repeater>

            <br />

            <br />
            <asp:Label ID="lblTs" runat="server"></asp:Label>

        </div>

    
    </div>
    </form>
</body>

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

扩展属性代码:

public partial class OrderDetails
{
    private decimal jiaGe;

    public decimal JiaGe
    {
        get 
        {
            FirutDataContext context = new FirutDataContext();

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

            Fruit data = query.First();


            return  data.Price.Value; 
        }
        set { jiaGe = value; }
    }

    private string shangPinName;

    public string ShangPinName
    {
        get {
            FirutDataContext context = new FirutDataContext();

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

            Fruit data = query.First();


            return data.Name; 
        }
        set { shangPinName = value; }
    }



}

购物车效果图:

技术分享

aspx代码:

<body>
    <form id="form1" runat="server">
   <div>
        <h1>购物车</h1>
        <p>&nbsp;</p>
        
        <div style="float:left; width:150px; height:500px;">

            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton>
            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton>
            <br />
            <br />
            <br />
            <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton>

        </div>
        <div style =" float:left; height:500px;">

            <asp:Repeater ID="Repeater1" runat="server">
                   <HeaderTemplate>
                        <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF">
                          <tr>
                            <td height="25" bgcolor="#FFFFFF">商品名称</td>
                            <td bgcolor="#FFFFFF">商品单价</td>
                            <td bgcolor="#FFFFFF">购买数量</td>
                            <td bgcolor="#FFFFFF">操作</td>
                          </tr>
                   </HeaderTemplate>
                    <ItemTemplate>

                            <tr>
                                <td height="25" bgcolor="#FFFFFF"><%#Eval("ShangPinName") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("JiaGe") %></td>
                                <td bgcolor="#FFFFFF"><%#Eval("Count") %></td>
                                <td bgcolor="#FFFFFF"><a href="ShanChu.aspx?code=<%#Eval("FruitCode") %>">删除</a></td>
                              </tr>
                    </ItemTemplate>
                <FooterTemplate>
                      </table>
                </FooterTemplate>
            </asp:Repeater>

            <br />

            <br />
            <asp:Label ID="lblTs" runat="server" ForeColor="#CC0000"></asp:Label>

            <br />
            <br />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交订单" />
            <br />
            <br />
            <asp:Label ID="lblSure" runat="server" ForeColor="#CC0000"></asp:Label>
            <br />

        </div> 
    </div>
    </form>
</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>

 

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

原文:http://www.cnblogs.com/jiangshuai52511/p/5222002.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!