simple world Ответов: 1

Вам список всех куки и отображения последних


Привет.
Мне нужно добавлять новый файл cookie каждый раз, когда пользователь входит на страницу с подробной информацией о продукте, и на этой странице или любой подобной странице мне нужно отобразить самые последние файлы cookie (продукты).
Итак, что мне нужно: например, у меня есть 4 куки-файла с именем = название продукта и значением = идентификатор продукта.
Мне нужно получить все 4 файла cookie, сравнить их значение или имя и отобразить их свойства в небольшом div в html.
Я работаю в C# в Visual Studio, и я новичок в этом.
Заранее спасибо.

Что я уже пробовал:

Это мой код для установки и получения файла cookie Recent.cs :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;

/// <summary>
/// Summary description for Recent
/// </summary>
public class Recent
{
    //List<Product> basketList



    public static void AddCookie(string name,string nameid)
    {
        HttpCookie cookie = new HttpCookie(name);
        HttpContext.Current.Response.Cookies[name].Value = nameid;
        cookie.Value = HttpContext.Current.Response.Cookies[name].Value;
        cookie.Expires = DateTime.Now.AddDays(1);
        HttpContext.Current.Response.Cookies.Add(cookie);
    }



    public static string GetCookie(string name)
    {
        HttpCookie cookie = HttpContext.Current.Request.Cookies[name];
        //List<Product> basketList = new List<Product>();
        if (cookie != null)
        {
            string objCartListString = cookie.Value.ToString();
            string[] objCartListStringSplit = objCartListString.Split('|');
            foreach (string s in objCartListStringSplit)
            {
                string[] ss = s.Split(',');
                if (ss[0] != "")
                {
                    Product model = new Product()
                    {
                        ProductID = Convert.ToInt32(ss[0]),

                    };
                    //basketList.Add(model);
                }

            }
        }
        return name;
    }






   
}


Это мой код в ProductDetails.cshtml (сначала я устанавливаю имя и значение, а затем возвращаю файл cookie с этим именем):
Recent.AddCookie(@Prod.Btitle.toGreeklish().ToString(),@Prod.ProductID.ToString());
    var co = Recent.GetCookie(@Prod.Btitle.toGreeklish().ToString());


Это html ul, где мне нужно отобразить некоторые детали продукта (цикл Foreach не проходит через все файлы cookie, а вместо этого проходит через саму строку, и, например, если strinng имеет 7 букв, я получаю 7 экземпляров тега li, отображаемого ниже.):

@if(co != "" && co != null)
                       {
                           foreach (var cookie in co)
                           {
                       <li>
                           <div class="single-product">
                               <div class="product-img">
                                   <a href="#">
                                       <img id="img_c" class="primary-image" src="@prodImg" alt="" />
                                       <img class="secondary-image" src="/img/product/16.jpg" alt="" />
                                   </a>
                               </div>
                               <div class="product-content">
                                   <div class="pro-info">
                                       <h2 class="product-name" id="name_c"><a href="#">@co</a></h2>
                                       <div class="price-box">
                                           <span class="new-price" id="price_c">€@Prod.UnitCost.ToString("0.##")</span>
                                           <span class="old-price">£120.00</span>
                                       </div>
                                   </div>
                               </div>
                           </div>
                       </li>
                           }

                       }

1 Ответов

Рейтинг:
4

Maciej Los

Нет, это не так.
Вы должны добавить продукты в свой файл cookie.

HttpCookie MyCookie = new HttpCookie("YourCookieName");
MyCookie.Values["Product1"] = "Banana";
MyCookie.Values["Product2"] = "Orange";
MyCookie.Values["Product3"] = "Apple";
Response.Cookies.Add(MyCookie);


Затем вы можете получить доступ к своим продуктам через Values или Value собственность. Заметить что Value свойство сохраняет значения таким образом: Key1=Val1&Key2=Val2&Key3=Val3&Key4=Val4&Key5=Val5

Для получения более подробной информации, пожалуйста, смотрите:
Класс HttpCookie (System.Web) | Microsoft Docs[^]
HttpCookie.Значение Свойства (System.Web) | Microsoft Docs[^]
HttpCookie.Значение Свойства (System.Web) | Microsoft Docs[^]


[РЕДАКТИРОВАТЬ]
Всякий раз, когда вы добавляете что-то в корзину, вам не нужно создавать новый файл cookie. Вы должны использовать тот же файл cookie и добавить к нему другое значение.
Ваш AddToBasket метод может выглядеть следующим образом:

void AddToBasket(string sKey, string sValue)
{
    HttpCookie BasketCookie = null;
    if(Request.Cookies["BasketCookie"]!=null)
    {
        BasketCookie = (HttpCookie)Request.Cookies["BasketCookie"];
    }
    else
    {
        BasketCookie = new HttpCookie("BasketCookie");
    }
    BasketCookie.Values[sKey] = sValue;
    BasketCookie.Expires = DateTime.Now.AddHours(2)
    Response.Cookies.Add(BasketCookie);

}


simple world

@MaciejLos Здравствуйте, спасибо, что ответили.
Я сделал то, что вы сказали, но все же я получаю несколько файлов cookie, и каждый файл cookie затем получает в качестве значения имя=значение.
И я не знаю, как получить все файлы cookie, которые существуют в браузере, в список, чтобы я мог перебирать их и отображать.

Maciej Los

Если ты сделаешь то, что я сказал, то получишь только одно печенье...
Для получения более подробной информации, пожалуйста, смотрите: Как создавать и извлекать файлы cookie в C# и ASP.net[^]