2015-12-07 14 views
5

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?

risposta

-1

Se si utilizzano i cookie, perché è necessario utilizzare la tabella di visualizzazione recente? La memorizzazione degli ID prodotto recenti nei cookie funzionerà sia per gli utenti registrati che per quelli anonimi.

+0

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

0

la soluzione migliore per voi è l'utilizzo di Html5 Web Storage.
consente di memorizzare fino a 5 MB nel browser locale.
puoi solo leggere e scrivere tramite javascript.
esempio:

$('#btnLocalStorage').click(function() 
{ 
    var txtName = $("#txtName").val(); 
    //set item 
    localStorage.setItem("EmpName", txtName); 
}); 

$('#btnLocalStorageRemove').click(function() 
{ 
    //remove item 
    localStorage.removeItem("EmpName"); 
}); 
$('#btnLocalStorageClear').click(function() 
{ 
    //clear Local Storage 
    localStorage.clear(); 
}); 
$('#btnLocalStorageLength').click(function() 
{ 
    var localStoragelength = localStorage.length; 
    alert("The length of Local storage is " + localStoragelength); 

}); 

Tra l'altro non ha tempo di scadenza e non lo u bisogno di guid.