2012-01-16 69 views
2

我试图添加一些动态表单元素到我的asp页面使用c#每当一个按钮被点击。该代码正在工作,但它会覆盖本身,而不是将面板,标签和文本框一次单击生成的元素放在前一次单击中生成的元素之后。计数器由全局变量控制。我可能错过了一些非常简单的东西,但任何帮助都会很棒。 谢谢!c#被覆盖的动态控件

protected void Button1_Click(object sender, EventArgs e) 
{ 

    Panel pnl = new Panel(); 
    pnl.ID = "Panel" + count.ToString(); 
    Panel1.Controls.Add(pnl); 

    TextBox tb = new TextBox(); 
    tb.ID = "Textbox" + count.ToString(); 
    pnl.Controls.Add(tb); 

    Label lbl = new Label(); 
    lbl.ID = "Label" + count.ToString(); 
    lbl.Text = "Label" + count.ToString(); 
    pnl.Controls.Add(lbl); 
    count++; 

} 

这里你可以看到效果:

enter image description here

+0

你可以发布你所看到的屏幕截图(或至少是一个屏幕截图的链接)吗? – ChrisF 2012-01-16 22:22:00

+0

感谢Chris,这里有一个链接:http://mechanical-legs.com/samples/cs_screen.jpg。带圆圈的是标签表单元素,每次点击按钮都会更新。 – 2012-01-16 22:50:09

+0

我假设在“步骤3”旁边应该有文本框和标签 – ChrisF 2012-01-16 22:52:37

回答

1

每次单击按钮时,你会得到一个回传。在后续的页面加载时,asp.net没有记录您在事件处理程序中添加的以前的控件。您需要自己跟踪它 - 在viewstate中 - 并在处理下一个回发之前通过查询viewstate重新创建之前添加的页面Init事件中的控件。如果你不初始化重新创建它们,它们将不能够正确(例如,它们将不能够回传自己或以其他方式向页的事件生命周期。)

这里的一些信息: http://forums.asp.net/t/1186195.aspx/1