【发布时间】:2016-03-11 07:51:46
【问题描述】:
我有一个 Product 表,其中包含许多产品。我的 HomeController 中有一个详细信息操作方法,它在详细信息视图页面中返回产品详细信息。
假设:我有这些数据:
ProductID | ProductName | Price | CategoryId
1 | T-Shirt | 120 | Clothing
2 | Shirt | 150 | Clothing
3 | Watch | 220 | Watches
4 | Laptop | 820 | Computing
5 | Samsung S6 | 520 | Mobile
6 | Xbox | 320 | Gaming
现在,我想要的是,如果某些用户访问 T 恤,那么我想将该 T 恤产品添加到“最近浏览”的新 <div> 中。如果他再次访问“手表”,请在“最近浏览”中添加手表产品<div>。
我还想根据他最近浏览的产品展示更多产品。我的意思是,如果他正在访问 Xbox,那么 Xbox 将被添加到最近查看的 <div> 中,并且更多与“游戏”类别相关的产品将显示在最近查看的 <div> 下方的新 <div> 中。
这是我正在尝试的,我的想法是将 productId 存储在 cookie 和详细信息视图页面中,获取 Cookie 请求,从 cookie 获取 productId 并找到该产品的类别并显示更多产品那个类别。
HomeController
public ActionResult Details(int? id)
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Product product = db.Products.Find(id);
if (product == null)
return HttpNotFound();
//Creating cookies
HttpCookie _userActivity = new HttpCookie("UserActivity");
_userActivity["ProductID"] = id.ToString();
_userActivity["ProdutName"] = product.Name;
_userActivity["Lastvisited"] = DateTime.Now.ToShortTimeString();
//Adding Expire Time of cookies
_userActivity.Expires = DateTime.Now.AddDays(5);
//Adding cookies to current web response
Response.Cookies.Add(_userActivity);
//Reading cookies
HttpCookie readcookie = Request.Cookies["UserActivity"];
string productID , productName, lastVisited ;
if (readcookie != null)
{
productID = readcookie["ProductID"];
productName = readcookie["ProdutName"];
lastVisited = readcookie["Lastvisited"];
}
return View(product);
}
我在我的详细信息视图页面中写了这个。它显示我最近查看产品的 ID 和详细信息,但只有 1 个产品的详细信息来自 cookie。不像我认为的那样
<div class="row">
<div class="col-sm-9">
@{
var product = Request.Cookies["UserActivity"].Values;
}
<p>@product</p>
<br />
<h2>@Html.DisplayFor(model => model.Name)</h2>
</div>
【问题讨论】:
-
看看你的 cookie。您已经对其进行了结构化,使其仅存储一个 ProductId 的信息。如果您想存储多个产品的信息,您将需要存储某种集合而不是单个 Id。
-
@mason 对不起,我没明白你的意思。你能举个例子说明你想说什么吗?
-
查看您在 cookie 中存储的内容。您正在存储一个 ProductId。如果您仅将其结构化为存储一个 ID,您希望它如何显示所有最近访问的产品?
-
每次你写一个同名的cookie时,你都会覆盖已经存在的cookie(因此你只有最后一个productid)。这就是梅森想说的(希望我是对的)。您应该将一些 productId 列表存储到 cookie 中,或者更好地使用其他机制将最近的 productId 列表传递给 View(可能通过 ViewData)。
-
@Jure 是的,你是对的。我做错了。如何使用 ViewData 做到这一点?你能写一个例子吗?
标签: c# asp.net asp.net-mvc asp.net-mvc-4 cookies