列表在按钮事件上变空

时间:2017-07-03 20:06:37

标签: asp.net arraylist data-structures collections hashset

每当按钮事件触发时,我的列表变为空并开始从第一个索引添加项目。它不保留上次点击时添加的旧项目。我试图在点击的每个按钮上存储我的列表中的某些元素的ID,并将它们插入到hashset中以避免重复。请帮助我解决这个问题

这是我的代码。

 List<int> venues = new List<int>();
 HashSet<int> hashset = new HashSet<int>();


                id = Convert.ToInt32(Request.QueryString["id"].ToString());


                venues.Add(id);

                foreach (int item1 in venues)
                {



                    if (!hashset.Add(item1))
                    {
                        Response.Write("<script>alert('Duplicate Items');</script>");
                        break;
                    }

                    else
                    {

                        foreach (var items in venues)
                        {
                            con.Open();
                            SqlCommand cmd = con.CreateCommand();
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = "select * from Venues where VenueID = '" + items + "'";
                            cmd.ExecuteNonQuery();
                            DataTable dt = new DataTable();
                            SqlDataAdapter ds = new SqlDataAdapter(cmd);
                            ds.Fill(dt);
                            foreach (DataRow dr in dt.Rows)
                            {
                                Name = dr["Name"].ToString();
                                Address = dr["Address"].ToString();
                                Picture = dr["Picture"].ToString();
                                Price = dr["Price"].ToString();
                            }
                            con.Close();
                            if (Request.Cookies["aa"] == null)
                            {
                                Response.Cookies["aa"].Value = Name.ToString() + "," + Address.ToString() + "," + Picture.ToString() + "," + Price.ToString();
                                Response.Cookies["aa"].Expires = DateTime.Now.AddDays(1);

                            }
                            else
                            {
                                Response.Cookies["aa"].Value = Request.Cookies["aa"].Value + "|" + Name.ToString() + "," + Address.ToString() + "," + Picture.ToString() + "," + Price.ToString();
                                Response.Cookies["aa"].Expires = DateTime.Now.AddDays(1);
                            }
                        }
                    }
                }

            }

3 个答案:

答案 0 :(得分:0)

如果这是整个onClick事件函数,则应该在函数范围之外创建列表。 例如,在Page_Load

中创建列表

答案 1 :(得分:0)

这可能与国家管理有关。 http的无状态意味着您丢失了任何形式的状态(例如,在请求 - 响应周期中创建的变量)尝试使用会话或任何其他状态管理技术在单击之间保持列表。 Session["venues"] = venues将列表放入会话中。并var venues = (list<int>)Session["venues"]从会话中读取列表

答案 2 :(得分:0)

我自己想通了。我使用静态列表来解决问题。感谢大家!