我使用已分配的checkedChanged事件动态创建所有这些事件的复选框,在回发时我重新创建并且除了一件事之外一切正常;
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];
}
}
答案 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对象中,以避免在每次回发时丢失它。