Sto tentando di visualizzare i prodotti visti di recente e finora l'ho già fatto. Ho una tabella Product
con molti prodotti archiviati. Ho HomeController
che ha un metodo di azione di Details()
che visualizza i dettagli del prodotto.Crea e leggi l'elenco <> dai cookie
ho scritto AddRecentProduct
metodo che memorizza prodotti recentemente (10) nella Session
Ora voglio per memorizzare questi recenti lista dei prodotti visto in biscotti per atleast 30 giorni sul computer i visitatori, perché sessione scade. Proprio come Imdb visto di recente.
Anche se creo un'altra tabella nel mio database RecentlyViewed
con le colonne rv_id, userId, productId
come posso salvare i dati di RecentViewedList in questo? La colonna userId terrà l'id utente loggedIn, ma se un utente è un Guest (non registrato) qual è la soluzione allora? Devo usare GUID allora?
RecentProduct.cs
public class RecentProduct
{
public int ProductId { get; set; }
public string ProdutName { get; set; }
public string ImageUrl { get; set; }
public DateTime LastVisited { get; set; }
}
controller
public void AddRecentProduct(List<RecentProduct> list, int id, string name, int maxItems)
{
var item = recentProductList.FirstOrDefault(t => t.ProductId == id);
if (item == null)
{
list.Add(new RecentProduct
{
ProductId = id,
ProdutName = name,
LastVisited = DateTime.Now,
});
}
while (list.Count > maxItems)
{
list.RemoveAt(0);
}
}
public ActionResult Details(int? id)
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Product product = db.Products.Find(id);
if (product == null)
return HttpNotFound();
var list = Session["RecentProductList"] as List<RecentProduct>;
if (list == null)
{
list = new List<RecentProduct>();
Session["RecentProductList"] = list;
}
AddRecentProduct(list, id.Value, product.Name, 10);
ViewData["RecentProductList"] = list;
return View(product);
}
sui prodotti Visualizza pagina
<div class="col-sm-9">
@{
var recentProductList = ViewData["RecentProductList"] as List<Project.Models.RecentProduct>;
}
@foreach (var recentProduct in recentProductList)
{
<p>@recentProduct.ProdutName (id: @recentProduct.ProductId) </p>
}
</div>
Sono ottenendo il risultato desiderato con la sessione, ora voglio fare lo stesso con i cookie.
Questo è quello che sto cercando Creazione di biscotto:
List<RecentProduct> yourList = new List<RecentProduct>();
RecentProduct rc = new RecentProduct();
rc.ProdutName = product.Name;
rc.ProductId = product.ProductId;
rc.ImageUrl = product.ImagePath;
rc.LastVisited = DateTime.Now;
yourList.Add(rc);
var yourListString = String.Join(",", yourList);
// Create a cookie
HttpCookie yourListCookie = new HttpCookie("YourList", yourListString);
// The cookie will exist for 7 days
yourListCookie.Expires = DateTime.Now.AddDays(7);
// Write the Cookie to your Response
Response.Cookies.Add(yourListCookie);
e In sui prodotti Visualizza pagina leggere cookie come questo:
@if (Request.Cookies["YourList"] != null)
{
// Your cookie exists - grab your value and create your List
List<string> yourList = Request.Cookies["YourList"].Value.Split(',').Select(x => Convert.ToString(x)).ToList();
// Use your list here
<p>@yourList</p>
}
Non ricevo alcun risultato. Come posso leggere cookie e valori?
Leggere di nuovo la domanda. In questo momento lo sto memorizzando in 'Session' e voglio memorizzarlo in Cookie come elenco di prodotti e ho detto ** SE ** Creo una tabella per archiviare prodotti visti di recente che quale sarebbe la soluzione. – user3223395667