我试图在按钮点击事件中将值存储在Arraylist中,并尝试在另一个按钮点击时检索它。但不知何故,Arraylist仍然是空的,我没有输出。 Plz帮助!!
ArrayList al = new ArrayList();
protected void btn1_Click(object sender, EventArgs e)
{
Class1 cl1 = new Class1();
cl1.name = txt1.Text;
cl1.course = txt2.Text;
al.Add(cl1);
}
protected void btn2_Click(object sender, EventArgs e)
{
for (int i = 0; i < al.Count; i++)
{
Class1 cl = (Class1)al[i];
Response.Write(cl.name);
Response.Write(cl.course);
}
}
答案 0 :(得分:0)
首先,您应该了解ASP.NET Page Life Cycle,因此我强烈推荐该文章。
通过了解asp.net web生命周期,您将了解到Web表单中的变量是无状态的,因此当您使用服务器控件(在您的情况下为Button)进行回发时,它会每次都刷新变量在button_click之后,您的ArrayList(al)将为空。
解决方案: 要在ASP.NET中解决此问题,您可以在表单上使用ASP.NET ViewState或Session变量来存储页面上的信息,但是如果您有大量数据(例如包含数百条记录的集合),则不是将它们存储在这些变量上的好习惯,因为它会导致应用程序性能降低并快速填满服务器内存。
所以在您的示例中,您可以拥有数据库中的数组列表,也可以使用静态方法或ViewState(不推荐使用)
protected void btn1_Click(object sender, EventArgs e) { ArrayList al = new ArrayList(); Class1 cl1 = new Class1(); cl1.name = txt1.Text; cl1.course = txt2.Text; al.Add(cl1); ViewState["al"] = al; } protected void btn2_Click(object sender, EventArgs e) { ArrayList al = ViewState["al"] as ArrayList; for (int i = 0; i < al.Count; i++) { Class1 cl = (Class1)al[i]; Response.Write(cl.name); Response.Write(cl.course); } }