最近見た商品を表示しようとしていますが、これまでに私はすでに行っています。多くの製品が格納されている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>
}
私はどんな結果が届きません。クッキーと値を読み取るにはどうすればよいですか?
もう一度質問をお読みください。今、私は 'Session'に保存しています。これをCookiesに製品のリストとして保存したいと思います。**私は最近見た製品を保存するためのテーブルを作成します。 – user3223395667