看看这段代码:
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".
为什么?
答案 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年多前给出的一个答案,它向您展示了一种处理这种情况的好方法: