为什么List的大小没有递增

时间:2013-06-20 09:33:16

标签: asp.net

我使用已分配的checkedChanged事件动态创建所有这些事件的复选框,在回发时我重新创建并且除了一件事之外一切正常;

  • 我应该在列表中保存已选中复选框的值。但似乎在每个postBack事件(每次我选中一个复选框)时,列表的元素都会丢失,尽管myche是List类型的全局变量;

lblProba.Text + =“in if clause; element count =”+ myche.Count.ToString();

每次检查复选框

时,

都会给我 1

protected void checkChanged(object sender, EventArgs e)
{
        CheckBox chk = (CheckBox)sender;
        if (chk.Checked)
        {
            myche.Add(chk.InputAttributes["value"].ToString());
            lblProba.Text +="in if clause; element count="+ myche.Count.ToString();


        }

        else 
        {
            lblProba.Text += "enering else;element count:"+myche.Count.ToString();




        }

            lblProba.Text += "Final length" + myche.Count.ToString();
            for (int t = 0; t < myche.Count; t++)
        { 
            Session["chk"]+= myche[t]; 

        }


}

3 个答案:

答案 0 :(得分:1)

在Web应用程序中,您可以将每个回发视为导致应用程序全新启动。它不记得任何状态,所有对象都被实例化,就像它是你的应用程序第一次运行一样。

ASP.NET尝试通过使用ViewState等内容来隐藏这一事实,但是服务器端对象不会超出单个请求/响应周期。

要通过多个请求来运行状态,您可以将中间值存储在Session变量中。

答案 1 :(得分:1)

您需要查看lifecycle of ASP.NET pages。每次调用页面时,ASP.NET都会创建一个新的页面实例,并使用任何Viewstate数据(如果这是一个回发)加载它并将控制传递给Load事件。页面将响应发送到浏览器后,实例将被销毁。

ASP.NET自动为静态创建的控件管理ViewState。您必须确保重建和填充动态控件所需的任何数据都保存在ViewState中,并用于在Loaded事件中重建它们。

答案 2 :(得分:0)

您应该存储您的列表,例如在Session对象中,以避免在每次回发时丢失它。