Using Cookie in server side

6 בפברואר 2010

תגיות: , , ,
אין תגובות

 


בפוסט הזה אני רוצה להדגים איך משתמשים ב – Cookie בצד השרת.

 

Cookie הוא אחד מהדרכים הותיקות ביותר לשמור מידע בצד הלקוח שניתן להשתמש בו גם בצד השרת.

 

 

נניח שיש לכם את קוד שמציג גריד עם מספר עמודות גדול מאוד ויש על הדף CheckListBox שמאפשר למשתמש להחליט איזה עמודות הוא מעוניין לראות.

 

הקוד נראה כך:

 

בצד הלקוח:

 



<asp:CheckBoxList ID="cbl" runat="server" RepeatDirection="Horizontal">


    <asp:ListItem Text="Id" Selected="True"></asp:ListItem>


    <asp:ListItem Text="First Name" Selected="True"></asp:ListItem>


    <asp:ListItem Text="Last Name" Selected="True"></asp:ListItem>


    <asp:ListItem Text="Age" Selected="True"></asp:ListItem>


    <asp:ListItem Text="Salaty" Selected="True"></asp:ListItem>


    <asp:ListItem Text="Seniority" Selected="True"></asp:ListItem>


</asp:CheckBoxList>


 


<br />


 


<asp:GridView ID="grid1" runat="server" OnRowDataBound="grid1_RowDataBound">


</asp:GridView>


 


<br />


 


<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />


 

יש לנו CheckListBox עם השמות של כל העמודות.

Grid ולחצן (כדי שנוכל לעשות PostBack).

 

צד השרת:

 



protected void Page_Load(object sender, EventArgs e)


{


    BindGrid();


}


 


private void BindGrid()


{


    DataTable table = new DataTable();


    table.Columns.Add("Id");


    table.Columns.Add("First Name");


    table.Columns.Add("Last Name");


    table.Columns.Add("Age");


    table.Columns.Add("Salary");


    table.Columns.Add("Seniority");


 


    table.Rows.Add(1, "Noam", "Gold", 30, 5000, 2.5);


    table.Rows.Add(1, "Pini", "Area", 25, 4500, 1);


    table.Rows.Add(1, "Alon", "Tamari", 20, 7000, 4);


 


    grid1.DataSource = table;


    grid1.DataBind();


}


 


protected void grid1_RowDataBound(object sender, GridViewRowEventArgs e)


{


    for (int j = 0; j < cbl.Items.Count; j++)


    {


        e.Row.Cells[j].Visible = cbl.Items[j].Selected;


    }


}


 

ב – Page_Load אנחנו נותנים Data ל – Grid (יוצרים טבלה עם סתם נתונים)

ובאירוע RowDataBound אנחנו מסתירים את העמודות שהמשתמש לא מעוניין לראות.

 

כמובן שבפעם הראשונה שהדף יעלה, המשתמש יראה את כל העמודות, הוא יוכל להוריד מה – CheckBoxList את הסימון עבור אותם עמודות שהוא אינו מעוניין לראות, לרפרש את העמוד ולראות רק את העמודות שהוא מעוניין.

 

הבעייה – המשתמש לא רוצה בכל פעם שהוא מעלה את הדף לסמן את העמודות שהוא רוצה לראות, הוא רוצה שהמחשב יזכור את הבחירה שלו מפעם קודמת.

 

הפיתרון – שימוש ב – Cookie.

 

נוסיף את הקוד הבא ללחצן שמרפרש את העמוד (אחרי שהמשתמש משנה את הבחירה שלו)

 



protected void Button1_Click(object sender, EventArgs e)


{


    HttpCookie cookie = new HttpCookie("ClientColumns");


    for (int j = 0; j < cbl.Items.Count; j++)


    {


        cookie.Values.Add(cbl.Items[j].Value, cbl.Items[j].Selected.ToString());


    }


    cookie.Expires = DateTime.Now.AddYears(1);


    Response.Cookies.Add(cookie);


}


 

אנחנו יוצרים Cookie נותנים לו את השם ClientColumns.

מוסיפים לו את רשימה של ערכים כשכל אחד מהם מורכב מ – Key ו – Value, במקרה שלנו בסופו של דבר אנחנו יוצרים משהו כזה:

 

Id=true&First Name=true&Last Name=false&Age=false&Salary=true&Seniority=true

 

לאחר מכן אנחנו מגדירים שתאריך התפוגה של ה – Cookie יהיה בעוד שנה (סתם תאריך)

והכי חשוב לא לשכוח להוסיף את ה – Cookie ל – Response.

 

כעת נוסיף ב – Page_Load את הקוד הבא (לפני הקריאה ל – BindGrid)

 



if (!IsPostBack)


{


    HttpCookie cookie = Request.Cookies["ClientColumns"];


    if (cookie != null)


    {


        foreach (string item in cookie.Values.Keys)


        {


            ListItem li = cbl.Items.FindByValue(item);


            li.Selected = bool.Parse(cookie.Values[item]);


        }


    }


}


 

אנחנו מנסים להוציא מה – Request את ה – Cookie (במידה והוא קיים)

רצים בלולאה על כל ה – Keys (כזכור כל Key הוא כשם אחד מה – items ב – CheckBoxList)

ומגידירים האם הוא יהיה מסומן לפי הערך שנשמר ב – Cookie.

 

 

כעת במידה והמשתמש יבחר לראות רק חלק מהעמודות – בפעם הבאה שהוא יגיע לעמוד המחשב יזכור את הבחירה שלו.

 

בפוסט הבא אני אדגים שימוש ב – Cookie בצד הלקוח.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *