Dynamically create textbox on button click

穿精又带淫゛_ 提交于 2020-02-23 04:19:13

问题


I have created a button whereby when it is clicked, it should display 3 textboxes in a row. However, every time i click the submit button, the textbox would display 2 rows(which is 6 textboxes). And subsequently increase 2 rows at every click.

Is there anyway that it could just increase one row of textbox at every click??

Here is the code infront:

<form id="form1" runat="server">
<div>

    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    <asp:Panel ID="Panel1" runat="server">
    </asp:Panel>

</div>
</form>

Code Behind:

         protected void Page_Load(object sender, EventArgs e)
       {
        // Add any controls that have been previously added dynamically
         for (int i = 0; i < TotalNumberAdded;  i++)
        {
        AddControls(i + 1);
        }

    // Attach the event handler to the button
    Button1.Click += new EventHandler(Button1_Click);
}

protected void Button1_Click(object sender, EventArgs e)
{

    // Increase the number added and add the new label and textbox
    TotalNumberAdded++;
    AddControls(TotalNumberAdded);

}

private void AddControls(int controlNumber)
{

        TextBox TxtBoxU = new TextBox();

        TextBox TxtBoxE = new TextBox();

        TextBox TxtBoxY = new TextBox();

        Label lblU = new Label();
        Label lblE = new Label();
        Label lblY = new Label();

        TxtBoxU.ID = "TextBoxU" + controlNumber;
        TxtBoxE.ID = "TextBoxE" + controlNumber;
        TxtBoxY.ID = "TextBoxY" + controlNumber;

        lblU.ID = "LabelU" + controlNumber;
        lblE.ID = "LabelE" + controlNumber;
        lblY.ID = "LabelY" + +controlNumber;

        lblU.Text = "User : ";
        lblE.Text = "E-Mail : ";
        lblY.Text = "Phone number : ";

        //Add the labels and textboxes to the Panel.
        Panel1.Controls.Add(lblU);
        Panel1.Controls.Add(TxtBoxU);
        Panel1.Controls.Add(TxtBoxU);

        Panel1.Controls.Add(lblE);
        Panel1.Controls.Add(TxtBoxE);

        Panel1.Controls.Add(lblY);
        Panel1.Controls.Add(TxtBoxY);
        Panel1.Controls.Add(new LiteralControl("<br>"));

   }

protected int TotalNumberAdded
{
    get { return (int)(ViewState["TotalNumberAdded"] ?? 0); }
    set { ViewState["TotalNumberAdded"] = value; }
}

回答1:


Your problem is in your page load, becouse your click event declaretion is redundant, you are attaching the EventHandler when you are assinging by HTML, And If you push click the event, It is fires 2 time.

Remove

Button1.Click += new EventHandler(Button1_Click); 

And you page load will looks like:

   protected void Page_Load(object sender, EventArgs e)
   {
    // Add any controls that have been previously added dynamically
     for (int i = 0; i < TotalNumberAdded;  i++)
    {
      AddControls(i + 1);
    }

  }

I hope that help.

P.S: I'm sorry in my first test I did not test right.




回答2:


protected void Button1_Click(object sender, EventArgs e)
{
    TextBox txtobj = new TextBox();
    Form.Controls.Add(txtobj);
    txtobj.Text = "Dynamically Textbox";

}


来源:https://stackoverflow.com/questions/17009246/dynamically-create-textbox-on-button-click

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!