4

我从上一篇文章中得到了这段代码,关于基于按钮的单击事件动态制作面板。出于某种原因,它给了我两个文本框,我在破译代码时遇到了问题。自从我处理这种 C# 以来已经有一段时间了。这可能是一个简单的修复,但是就像我说的那样,已经有一段时间了。ASP.net 代码只是一个按钮,因此无需粘贴。

C#:

public partial class Testing : System.Web.UI.Page
{
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)
    {
        var newPanel = new Panel();
        var newLabel = new Label();
        var newTextbox = new TextBox();

        // textbox needs a unique id to maintain state information
        newTextbox.ID = "TextBox_" + controlNumber;

        newLabel.Text = "Nature Of Accident";

        // add the label and textbox to the panel, then add the panel to the form
        newPanel.Controls.Add(newLabel);
        newPanel.Controls.Add(newTextbox);
        form1.Controls.Add(newPanel);
    }

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



}
4

2 回答 2

2

您的按钮是否已经在 asp 页面中绑定了一个事件?

Button1.Click += new EventHandler(Button1_Click);

这似乎会给您带来一些问题,尤其是在重新加载时。

于 2012-09-20T17:28:35.577 回答
2

从您的页面加载中删除 Button1.Click 行。

 Button1.Click += new EventHandler(Button1_Click);

如果您的 .aspx 按钮已经看起来像这样:

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

那么这意味着当您单击按钮时,您的代码将通过 Page_Load,这意味着它将为 Button1_Click 执行您的事件处理程序,然后它将进一步处理您的实际事件,再次成为 Button1_Click ,所以基本上就是这样为什么你会得到 2 个文本框。

于 2012-09-20T17:28:48.800 回答