从cookie获取信息以隐藏MVC3中的gridview中的行

时间:2012-04-24 21:50:48

标签: asp.net-mvc asp.net-mvc-3 cookies session-cookies httpcookie

我正在尝试返回一个视图,该视图排除了用户点击隐藏的行,并生成了一个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());
     }

我已经尝试创建一个字符串并继续向字符串添加新值,但它仍然只需要点击最后一个值。

1 个答案:

答案 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());
 }