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

在ASP.NET的Arraylist中存储和检索值,asp.net,arraylist,Asp.net,Arraylist,我试图在按钮单击事件时将值存储在Arraylist中,并尝试在另一次按钮单击时检索它。但不知何故,Arraylist仍然是空的,我没有得到任何输出。请帮忙 ArrayList al = new ArrayList(); protected void btn1_Click(object sender, EventArgs e) { Class1 cl1 = new Class1(); cl1.name = txt1.Text; cl1.course = txt2

我试图在按钮单击事件时将值存储在Arraylist中,并尝试在另一次按钮单击时检索它。但不知何故,Arraylist仍然是空的,我没有得到任何输出。请帮忙

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

首先,你应该理解这篇文章,所以我强烈推荐这篇文章

通过了解asp.net web生命周期,您将了解web表单中的变量是无状态的,因此当您使用服务器控件进行回发时,在您的情况下,按钮会刷新变量,因此每次单击按钮后,您的ArrayList al将为空

解决方案: 要在ASP.NET中解决此问题,您可以在表单上使用或会话变量在页面上存储信息。但是,如果您有大量数据,例如包含数百条记录的集合,则将它们存储在这些变量上不是一个好的做法,因为这会导致应用程序性能降低,并占用服务器内存快点

因此,在您的示例中,可以使用数据库中的数组列表,也可以使用静态方法或viewstate,但不推荐使用


你应该交叉检查你的阵列,看看你是否在其他地方弄乱了它。先生,你解释得很清楚,没有任何修饰,你能告诉我解决这个问题的正确方法吗。我更喜欢来自数据库或静态方法的arraylist示例。请帮忙!!您需要一个数据库表来存储阵列的信息。例如,如果您只有name和course字段,那么您只需要在数据库中包含这两个字段的一个表,然后编写ADO.NET或Linq2Sql代码,将您的信息存储到btn1_Click事件的数据库中,并在btn2_Click上选择这些信息。这是一个非常好的选择简单明了的概念。实际上,我感到困惑的是,如果我将一个变量放在事件范围之外,它将成为全局变量,并且可以保存可以在任何地方访问的值,但是在阅读页面加载生命周期之后,我非常确定我的方向是错误的。我需要专注于国家管理。如果有关于国家管理的文章,请给我一些简单但全面的链接。
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);
   } 
}