-1

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

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

lblProba.Text +="in if 子句; 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]; 

        }


}
4

3 回答 3

1

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

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

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

于 2013-06-20T09:41:57.893 回答
1

您需要检查ASP.NET 页面的生命周期。每次调用页面时,ASP.NET 都会创建页面的一个新实例,将其与任何 Viewstate 数据一起加载(如果这是回发)并将控制权传递给您的 Load 事件。一旦页面将响应发送到浏览器,该实例就会被销毁。

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

于 2013-06-20T09:42:46.000 回答
0

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

于 2013-06-20T09:42:20.640 回答