单击事件后按钮阵列消失

Ann*_*a T 1 c# asp.net visual-studio-2008

单击任何按钮后,为什么我的按钮(按钮数组)会消失?这是代码结构.非常感谢提前.

public partial class Seatalloc2 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PopulateControls();
            }

        }

        protected void PopulateControls()
        {

            Button[,] buttonArray = new Button[10, 14];
            for (int a = 0; a < 10; a++)
            for (int b = 0; b < 14; b++)
            { 
               buttonArray[a, b] = new Button();
               Panel2.Controls.Add(buttonArray[a, b]);
             } 

        }

        public void buttonHandler(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            btn.BackColor = Color.Red;           
        } 
    }
Run Code Online (Sandbox Code Playgroud)

Jup*_*aol 5

如果您查看我对上一个问题的答案,您将找到解决此问题的示例:

/sf/answers/774324771/

根本问题是理解ASP.Net页面生命周期(我讨厌它)但是理解它背后的基础是有用的和关键的

Microsoft的此文档详细说明了页面生命周期

http://msdn.microsoft.com/en-us/library/ms178472.aspx

基本上控件正在消失,因为您需要在每次回发的页面中重新创建它们,并且在您的代码中,您只是在第一次加载页面时创建它们

PreInit如果您没有母版页,或者Init如果您有一个母版页,则建议创建动态控件的事件是

因此,如果您将代码更改为:

void Page_Init(object sender, EventArgs e)
{
   PopulateControls();
}
Run Code Online (Sandbox Code Playgroud)

您的按钮将保存其状态.不要担心状态,即使它们在每个帖子中重新创建,因为你在Init事件中这样做,ASP.Net会ViewState自动加载到你的控件(这是可能的,因为ASP.Net加载后的视图状态该Init事件与之前Load事件)

作为快速参考,请查看页面生命周期:

在此输入图像描述