Dynamically add a new text field when a button is clicked

I am using this code

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> <asp:Button ID="addnewtext" runat="server" Text="Add" onclick="addnewtext_Click" width="76px" /> 

and aspx.cs :

 TextBox tb; static int i = 0; protected void addnewtext_Click(object sender, EventArgs e) { tb = new TextBox(); tb.ID = i.ToString(); PlaceHolder1.Controls.Add(tb); i++; } 

Each time I click the button, I want to add another text box.

+4
source share
2 answers

Reason: When you click the button again than the callback to the server and it deletes the previously added dynamically text field

Solution: To add it again, you need to do it as follows:

  TextBox tb; static int i = 0; protected void addnewtext_Click(object sender, EventArgs e) { i++; for(j=0;j<=i;j++) { tb = new TextBox(); tb.ID = j.ToString(); PlaceHolder1.Controls.Add(tb); } } 

this means that you need to create the added text box again ... because you are dynamically adding controls to the page ...

A similar article can help you: Retain state for dynamically created controls in ASP.NET applications

+6
source

Lets go with the list

 <asp:ListView ID="lvDynamicTextboxes" runat="server" ItemPlaceholderID="itemPlaceholder"> <LayoutTemplate> <table> <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> </table> </LayoutTemplate> <ItemTemplate> <tr> <asp:TextBox ID="txtText" runat="server"> </asp:TextBox> </tr> </ItemTemplate> </asp:ListView> <asp:Button ID="btnAddTextBox" runat="server" Text="Add" onclick="btnAddTextBox_Click" /> 

And some codes

 private void BindListView() { //get the current textbox count int count = 1; if (ViewState["textboxCount"] != null) count = (int)ViewState["textboxCount"]; //create an enumerable range based on the current count IEnumerable<int> enumerable = Enumerable.Range(1, count); //bind the listview this.lvDynamicTextboxes.DataSource = enumerable; this.lvDynamicTextboxes.DataBind(); } private void IncrementTextboxCount() { int count = 1; if (ViewState["textboxCount"] != null) count = (int)ViewState["textboxCount"]; count++; ViewState["textboxCount"] = count; } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { this.BindListView(); } } protected void btnAddTextBox_Click(object sender, EventArgs e) { this.IncrementTextboxCount(); this.BindListView(); } 

Now To extract values from these added text fields:

 private IList<string> GetValues() { List<string> values = new List<string>(); TextBox txt = null; foreach (ListViewItem item in this.lvDynamicTextboxes.Items) { if (item is ListViewDataItem) { txt = (TextBox)item.FindControl("txtText"); values.Add(txt.Text); } } return values; } 
0
source

Source: https://habr.com/ru/post/1447414/


All Articles