0

ユーザーが隠すためにクリックした行を除外するビューを返そうとしていて、ユーザーが非表示にする行の情報を格納するCookieが生成されます。MVC3のグリッドビューから行を隠すためにクッキーから情報を取得する

私の問題は、クッキーには1つの値しか含まれていないため、select文は一度に1行しか除外しないということです。ここで私が持っているものです。

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

私は、これを行うための最良の方法です(TempData、または少なくともSessionオブジェクトを使用すると考えているので、各ユーザーに単一の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()); 
} 
+0

返信いただきありがとうございます。この割り当てでは、クッキーを使用して非表示にする必要があるため、その選択肢はありません。私は分割を変更し、構文を働かせるためにメソッドを少し参加させなければならなかった。 hideItems = cookie.Value.Split( '、')。ToList(); cookie.Value = string.Join( "、"、hideItems.ToArray()); hideItemsが文字列であり、Quote_IDがintであり比較できないため、ビューを返すことができません。私は "LINQ to Entities"メソッドを 'System.String ToString()'メソッドを認識しないし、このメソッドをストア式に変換することはできません。その上でToStringメソッドを使用しようとすると – user1354780

+0

@ user1354780ああ...更新を参照してください。比較を行う前にリストをリストに変換することができます。 – McGarnagle

+0

私はそこに(string.joinとstring.splitの)いくつかのタイプミスがあったようです。今すぐ修正する必要があります:私はもっとコーヒーが必要なように見えます:-( – McGarnagle

関連する問題