如何在购物车中使用会话变量

时间:2013-12-19 18:16:22

标签: c# sql-server

我一直试图在c#asp.net和SQL server中创建购物车没有成功。

我能够从数据库中检索产品并为每个产品创建详细视图。

现在我需要创建“添加到购物车”按钮,我知道我必须创建一个带有数组的会话变量来保存产品信息然后在购物车中显示但我不知道如何。

这是我在productsDetail.cs中的代码:

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection connexionBD = new SqlConnection(this.data_un_jouet.ConnectionString);

        SqlCommand commandeJouets = null;

        SqlDataReader lecteurJouets = null;

        try
        {
            connexionBD.Open();

            String id = Request.QueryString["no"];

            Session["product"] = id;

            string myQuery = data_un_jouet.SelectCommand;

            commandeJouets = new SqlCommand(myQuery, connexionBD);

            commandeJouets.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(id);

            lecteurJouets = commandeJouets.ExecuteReader();

            TableRow uneLigne;
            TableCell uneCellule;

            while (lecteurJouets.Read())
            {
                uneLigne = new TableRow();
                string myID = Convert.ToString(lecteurJouets["id"]);

                uneCellule = new TableCell();
                uneCellule.Text = Convert.ToString(lecteurJouets["name"]);
                uneLigne.Cells.Add(uneCellule);                    

                uneCellule = new TableCell();
                uneCellule.Text = "<img src=" + lecteurJouets["image"].ToString() + "/>";
                uneLigne.Cells.Add(uneCellule);

                uneCellule = new TableCell();
                uneCellule.Text = Convert.ToString(lecteurJouets["description"]);
                uneLigne.Cells.Add(uneCellule);

                uneCellule = new TableCell();
                uneCellule.Text = Convert.ToString(lecteurJouets["price"]);
                uneLigne.Cells.Add(uneCellule);

                uneCellule = new TableCell();
                uneCellule.Text = "<a href=\"cart.aspx?no=" + myID + "\" />Add to cart</a>";
                uneLigne.Cells.Add(uneCellule);

                this.un_jouet.Rows.Add(uneLigne);
            }

            lecteurJouets.Close();
            commandeJouets.Dispose();
        }
        catch (Exception ex)
        {
            msgErreur.Text = "Erreur de connexion ! " + ex.Message;
        }
        finally
        {
            connexionBD.Close();
        }

我知道大部分代码都是法语代码,我试图翻译其中一些代码。

这段代码工作得很好,问题是当点击“添加到购物车按钮”时我不知道该怎么做。

我创建了一个会话变量,但它只包含产品ID。

非常感谢你的帮助,

1 个答案:

答案 0 :(得分:0)

就像你说的那样你需要为会话分配一个数组。更好的是,使用List,因为您没有固定数量的项目。假设我们将商品的ID存储在购物车中,并且这些ID是整数。所以首先我们需要实例化List。有很多地方可以做到这一点,但是现在Page_Load事件很好。

If (Session["ShoppingCart"] == null)
{
    Session["ShoppingCart"] = new List<int>();
}

我们先检查一下我们是否已经分配了会话变量,如果没有,我们会这样做。

然后,当客户将商品添加到购物车时(比如按下按钮),您需要将其添加到处理该事件的代码中:

var products = (List<int>)Session["ShoppingCart"];
products.Add(newProductId);

我在这里没有做过(你应该)是检查会话变量实际上有一个List以避免错误。请记住,会话不是强类型的。

为了更好更清洁的代码,你应该将会话封装在它自己的get / set属性中。