我正在尝试返回一个视图,该视图排除了用户点击隐藏的行,并生成了一个cookie,用于存储用户希望隐藏哪些行的信息。
我的问题是cookie只包含一个值,因此我的select语句一次只排除一行。这就是我所拥有的:
public ActionResult Hide(int id)
{
HttpCookie cookie = new HttpCookie("HideCookie");
cookie.Value = id.ToString();
cookie.Expires = DateTime.Now.AddYears(1);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
int i = Convert.ToInt32(Request.Cookies.Get("HideCookie").Value);
var quotes = from q in db.View1 where !q.Quote_ID.Equals(i) select q;
return View(quotes.ToList());
}
我已经尝试创建一个字符串并继续向字符串添加新值,但它仍然只需要点击最后一个值。
答案 0 :(得分:0)
我没有卖掉那些cookie是最好的方法(你考虑过使用TempData,或者至少使用Session对象,这样你只需要向每个用户发送一个cookie吗?)虽然使用这种方法,但似乎你可以使用逗号分隔的cookie对象列表来完成它。
public ActionResult Hide(int id)
{
var cookie = Request.Cookies.Get("HideCookie");
List<string> hideItems;
if (cookie == null)
{
cookie = new HttpCookie("HideCookie");
hideItems = new List<string>() { id.ToString() };
cookie.Value = id.ToString();
cookie.Expires = DateTime.Now.AddYears(1);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
else
{
cookie = Request.Cookies.Get("HideCookie");
hideItems = cookie.Value.Split(',').ToList();
hideItems.Add(id.ToString());
cookie.Value = string.Join(",", hideItems);
}
var quotes = from q in db.View1 where
!hideItems.Select(i=>int.Parse(i)).Contains(q.Quote_ID) select q;
return View(quotes.ToList());
}