2013-12-19 2 views
0

Я пытаюсь без успеха создать корзину покупок в C# asp.net и SQL-сервере.Как использовать переменную сеанса в корзине покупок

Мне удалось получить продукты из базы данных и создать подробный вид для каждого продукта.

Сейчас мне нужно создать кнопку «добавить в корзину», я знаю, что мне нужно создать переменную сеанса с массивом, чтобы сохранить информацию о продуктах, а затем показать ее в корзине, но я не знаю, как ,

Это мой код в 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(); 
     } 

Я знаю, что большая часть кода на французском, я попытался перевести некоторые из них.

Этот код работает нормально, проблема в том, что я не знаю, что делать, когда нажата кнопка «Добавить в корзину».

Я создал переменную сеанса, но содержит только идентификатор продукта.

Большое спасибо за вашу помощь,

ответ

0

Как вы сказали, что вам нужно присвоить массив сессии. Еще лучше, используйте Список, так как у вас нет фиксированного количества элементов. Предположим, что мы храним идентификаторы элементов в корзине покупок и что эти идентификаторы являются int. Поэтому сначала нам нужно создать экземпляр списка. Есть много мест, где вы можете это сделать, но на данный момент событие Page_Load прекрасное.

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

Прежде всего, мы проверим, действительно ли мы уже назначили переменную сеанса, и если мы этого не сделаем.

Затем, когда клиент добавляет товар в корзину (например нажимает на кнопку), вам нужно добавить это в код обработки этого события:

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

То, что я не сделал здесь (и вам нужно), чтобы проверить переменную сеанса, на самом деле есть список, чтобы избежать ошибок. Помните, что сеансы не сильно типизированы.

Для лучшего и чистого кода вы должны инкапсулировать сеанс внутри собственного свойства get/set.

+0

Большое спасибо за помощь @System Down Я объявляю список продуктов на странице load details.cs Я получаю эту ошибку при запуске программы: «Ссылка на объект не установлена ​​в экземпляр объекта «. Он исходит из строки, где я добавляю свой идентификатор в список: «products.Add (myID);» Я добавил условие, чтобы проверить, существует ли сессия в cart.cs. Я предполагаю, что мне нужно зациклить список для извлечения продуктов, но у меня нет идеи, я знаю, что много спросить, но любая помощь было бы замечательно для меня. – Xavieres

Смежные вопросы