2015-12-07 9 views
5

最近見た商品を表示しようとしていますが、これまでに私はすでに行っています。多くの製品が格納されているProductテーブルがあります。商品の詳細を表示するDetails()のActionメソッドを持つHomeControllerがあります。クッキーからリスト<>を作成して読む

私は、セッションの有効期限が切れたので、今私は、訪問者のコンピュータ上で、少なくとも30日のためのクッキーの中にこれらの最近の閲覧製品リストを保存したいSession

で最近見た商品を格納AddRecentProduct方法(10)を書いています。最近見たImdbのように。

また、RecentlyViewedのカラムにrv_id, userId, productIdのデータベースを作成すると、これでrecentViewedListデータをどのように保存しますか? userIdカラムにはloggedInユーザのIDが格納されますが、ユーザがゲスト(登録されていない)の場合はどうなりますか? GUIDを使用する必要がありますか?

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; } 
} 

コントローラ

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); 
    } 

ProductDetailsビューページ

<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> 

セッションで所望の結果を得るために、私はこれをクッキーと同じにしたいと思います。

これは私が作成クッキーをしようとしているものです:

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); 

ProductDetailsで見るページこのような読んクッキー:

@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> 

    } 

私はどんな結果が届きません。クッキーと値を読み取るにはどうすればよいですか?

答えて

-1

クッキーを使用している場合、なぜ、最近Viewededテーブルが必要ですか?最近の製品IDをクッキーに保存すると、ログインユーザーと匿名ユーザーの両方で機能します。

+0

もう一度質問をお読みください。今、私は 'Session'に保存しています。これをCookiesに製品のリストとして保存したいと思います。**私は最近見た製品を保存するためのテーブルを作成します。 – user3223395667

0

あなたにとって最適な解決策は、Html5 Web Storageを使用することです。
それはローカルブラウザで最大5MBを保存することができます。
あなたはジャバスクリプトを介してのみ読み書きできます。
例:

$('#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); 

}); 

それは時間がないと期限切れにしており、uはGUIDを必要といけないところで。

関連する問題