每当按钮事件触发时,我的列表变为空并开始从第一个索引添加项目。它不保留上次点击时添加的旧项目。我试图在点击的每个按钮上存储我的列表中的某些元素的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);
}
}
}
}
}
答案 0 :(得分:0)
如果这是整个onClick事件函数,则应该在函数范围之外创建列表。 例如,在Page_Load
中创建列表答案 1 :(得分:0)
这可能与国家管理有关。 http的无状态意味着您丢失了任何形式的状态(例如,在请求 - 响应周期中创建的变量)尝试使用会话或任何其他状态管理技术在单击之间保持列表。
Session["venues"] = venues
将列表放入会话中。并var venues = (list<int>)Session["venues"]
从会话中读取列表
答案 2 :(得分:0)
我自己想通了。我使用静态列表来解决问题。感谢大家!