如何在asp.net中单击按钮时动态添加控件?

我正在尝试动态添加控件

码:

AddVisaControl.ascx

  
Visa Number: Country Name:
Type of Visa: Type of Entry:
  Expiry Date

.cs代码:

下面的代码是第一次点击添加按钮时正在添加控件的问题,但如果我关闭浏览器窗口然后再次点击添加按钮我得到更多控件

  static int i = 0; protected void addnewtext_Click(object sender, EventArgs e) { i++; for (int j = 0; j <= i; j++) { AddVisaControl ac = (AddVisaControl)Page.LoadControl("AddVisaControl.ascx"); PlaceHolder1.Controls.Add(ac); PlaceHolder1.Controls.Add(new LiteralControl("
")); } }

在下面的图像如果我点击添加更多签证按钮我想获得另一个签证详细信息

在此处输入图像描述

有任何想法吗? 提前致谢

我将展示一个你可以按照自己的方式尝试的例子

一个想法是创建一个按钮列表,您可以在其中存储您在btnCreateDynamic_click创建的按钮

你可以有一个像这样的方法:

 private Button CreateButton(string id, string name) { Button b = new Button(); b.Text = name; b.ID = id; b.Click += new EventHandler(Button_Click); b.OnClientClick = "ButtonClick('" + b.ClientID + "')"; return b; } 

btnCreateDynamic_click你可以有类似的东西:

 Button b = CreateButton("dinamicBtn"+myDinamicButtonsList.Count.ToString(),"dinamicBtn"+myDinamicButtonsList.Count.ToString()); myDinamicButtonsList.add(b); and in the pageLoad for example you could do something like foreach(button btn in myDinamicButtonsList){ form1.Controls.Add(btn)); } List 

myDinamicButtonsList应存储在每个请求后可以检索的位置。

编辑:在页面加载中你可以有这样的东西:

 if(Session["myDinamicButtons"] == null){ List 

我没有测试它,但它应该工作。

也提供一些信息以下可能更有帮助..

您在客户端的按钮单击事件将导致页面回发,这将启动ASP.Net页面生命周期。 在此处输入图像描述

您在服务器上的按钮单击事件是PostBackEvent ,您应该能够使用在Load或Init事件中使用的相同方法调用CreateMyButton()

如果删除静态’i’变量并使用hidenInput来维护创建的控件(或会话值),则可以。

但我建议您阅读以下文章,以找到创建动态控件的更好方法:

ASP.NET中的动态控件创建

删除static int i = 0;

更改方法如下

  protected void addnewtext_Click(object sender, EventArgs e) { AddVisaControl ac = (AddVisaControl)Page.LoadControl("AddVisaControl.ascx"); PlaceHolder1.Controls.Add(ac); PlaceHolder1.Controls.Add(new LiteralControl("
")); }