【问题标题】:Dynamically create textbox on button click在按钮单击时动态创建文本框
【发布时间】:2013-06-09 11:46:07
【问题描述】:

我创建了一个按钮,当单击它时,它应该连续显示 3 个文本框。但是,每次我单击提交按钮时,文本框都会显示 2 行(即 6 个文本框)。随后每次点击增加 2 行。

无论如何它可以在每次点击时增加一行文本框?

这是前面的代码:

<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>

代码背后:

         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; }
}

【问题讨论】:

  • 嗨,我测试了你的代码,当我点击按钮时,我只得到一行。
  • 真的!?但我不断得到两行而不是一..

标签: c# asp.net textbox


【解决方案1】:

您的问题在于您的页面加载,因为您的 click event 声明是多余的,当您通过 HTML 进行分配时,您附加了 EventHandler,如果您推送点击事件,它会触发 2 次。

删除

Button1.Click += new EventHandler(Button1_Click); 

您的页面加载将如下所示:

   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);
    }

  }

希望对你有所帮助。

P.S: 很抱歉我第一次测试没有正确测试。

【讨论】:

    【解决方案2】:
    protected void Button1_Click(object sender, EventArgs e)
    {
        TextBox txtobj = new TextBox();
        Form.Controls.Add(txtobj);
        txtobj.Text = "Dynamically Textbox";
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2020-04-12
      相关资源
      最近更新 更多