在ASP.NET中存储和检索Arraylist中的值

时间:2014-05-26 01:51:46

标签: asp.net arraylist

我试图在按钮点击事件中将值存储在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);
    }
}

1 个答案:

答案 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);
   } 
}