Отправка двух текстовых полей вместо одного динамически

Я получил этот код из предыдущего сообщения здесь о динамическом создании панели на основе события нажатия кнопки. По какой-то причине он дает мне два текстовых поля, и у меня возникают проблемы с расшифровкой кода. Прошло некоторое время с тех пор, как я имел дело с таким 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; }
    }



}

person user1574685    schedule 20.09.2012    source источник


Ответы (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 снова< /em>, поэтому в основном вы получаете 2 текстовых поля.

person Thousand    schedule 20.09.2012
comment
нет проблем! вы кажетесь новичком в SO, поэтому я просто говорю, что если вы нашли ответ полезным, вы можете проголосовать за него или принять его :) - person Thousand; 20.09.2012
comment
я бы хотел, но у меня пока нет представителя 15+ :( - person user1574685; 20.09.2012
comment
Кроме того, это для формы asp.net, я забыл, как писать HTML в скрипт в этом случае ›_‹ Я чувствую себя таким нубом, я хочу отформатировать текстовое поле, я собираюсь настроить его в полную форму с 4 текстовыми полями и 4 метками, и я хочу сделать это в виде таблицы - person user1574685; 20.09.2012
comment
что именно ты хочешь сделать? я не понимаю - person Thousand; 20.09.2012
comment
Отформатируйте его так, чтобы метки и текстовые поля были в таблице, чтобы она выглядела чистой, я знаю, как писать код, я просто не знаю, куда его поместить. - person user1574685; 20.09.2012
comment
stackoverflow.com/questions/2160847 / проверьте эту ссылку, она показывает, как динамически помещать ваши метки и текстовые поля в таблицу. - person Thousand; 20.09.2012
comment
Вроде понимаю, есть ли шанс, что вы можете привести мне пример? В этом случае внутри панели? - person user1574685; 20.09.2012
comment
у меня действительно нет времени, может быть, лучше опубликовать новый вопрос, так как то, что вы спрашиваете сейчас, больше не соответствует вашему первоначальному вопросу. Но в Интернете есть множество примеров того, как это сделать. - person Thousand; 20.09.2012

У вашей кнопки уже есть привязанное к ней событие на странице asp?

Button1.Click += new EventHandler(Button1_Click);

Похоже, это может вызвать некоторые проблемы, особенно при перезагрузке.

person user1437891    schedule 20.09.2012