动态添加ASP.NET中的元素

时间:2012-10-17 21:23:43

标签: asp.net postback

看看这段代码:

        static int i = 0;
       protected void Page_Load(object sender, EventArgs e)
    {
        HtmlButton myButton;
        if (!Page.IsPostBack)
        {
            myButton = new HtmlButton();
            myButton.InnerText = "Button first load";
            myButton.ID = i.ToString();
            PlaceHolder1.Controls.Add(myButton);
            i++;
        }
        else
        {
            myButton = new HtmlButton();
            myButton.InnerText = "Button postback" + i.ToString();
            myButton.ID = i.ToString();
            PlaceHolder1.Controls.Add(myButton);
            i++;
        }
    }

预期:

       first load:  "Button first load"
       first postback: first load + "Button postback1"
       second postback: first postback + "Button postback2" ... and so on.

有:

      "Button first load"
      "Button postback1"
      "Button postback2".

为什么?

1 个答案:

答案 0 :(得分:3)

您的预期结果确实有误......:)

现在正在发生的事情正如你在代码中写的那样:

第一次加载(不回发):

 myButton.InnerText = "Button first load";

然后:

"Button first load"

第2次,第3次,第n次加载(回发):

 myButton.InnerText = "Button postback" + i.ToString();

然后:

"Button postback1"
"Button postback2"
.
.
.

更新:

现在我明白了你的问题......

ASP.NET不会保留动态控件的状态,因此无法在回发后重新创建它们。

底线: 您必须在每次回发后重新创建动态添加的控件。

这是我2年多前给出的一个答案,它向您展示了一种处理这种情况的好方法:

https://stackoverflow.com/a/2982271/114029