Как динамически генерировать метки и текстовые поля, используя простые циклы for в C#

Итак, я пытаюсь создать две метки и два текстовых поля одним нажатием кнопки. Каждый раз, когда я нажимаю кнопку, она должна генерировать новый набор меток и текстовых полей на экране.

Вот макет

Label 1   Textbox 1   Label 2   Textbox 2  Button

При каждом нажатии кнопки должно происходить следующее

1 клик

Label 1   Textbox 1  Label 2   Textbox 2  Button     

Label 3   Textbox 3  Label 4   Textbox 4  

2 клика

Label 1   Textbox 1  Label 2   Textbox 2  Button 
Label 3   Textbox 3  Label 4   Textbox 4    
Label 5   Textbox 5  Label 6   Textbox 6 

Как я могу достичь этого.

В настоящее время я вижу только один ряд ярлыков и текстовых полей, они, вероятно, перезаписываются в одном и том же месте.

Вот мой код.

        button_press++;
        for (int i = 0; i < button_press; i++)
        {
            Debug.WriteLine("Hello"); 
            Label book_number = new Label();
            book_number.Text = "Book Number";
            book_number.Style["Position"] = "Relative";
            book_number.Style["Top"] = "0px";
            book_number.Style["Left"] = "0px";
            TextBox textBox_book_number = new TextBox();
            textBox_book_number.Style["Position"] = "Relative";
            textBox_book_number.Style["Top"] = "0px";
            textBox_book_number.Style["Left"] = "10px";
            Label amount = new Label();
            amount.Text = "Amount";
            amount.Style["Position"] = "Relative";
            amount.Style["Top"] = "0px";
            amount.Style["Left"] = "30px";
            TextBox textBox_amount = new TextBox();
            textBox_amount.Style["Position"] = "Relative";
            textBox_amount.Style["Top"] = "0px";
            textBox_amount.Style["Left"] = "45px";

            form1.Controls.Add(book_number);
            form1.Controls.Add(textBox_book_number);
            form1.Controls.Add(amount);
            form1.Controls.Add(textBox_amount);
            form1.Controls.Add(new LiteralControl("<br />"));
        }

4 ответа

Каждый раз, когда вы нажимаете кнопку, страница обновляется, поэтому ранее созданные текстовое поле и метка удаляются.

Я бы посоветовал вам сохранять текстовые поля и метки в списке и добавлять их в коллекцию при каждом нажатии кнопки, а затем отображать всю коллекцию при нажатии кнопки.

Добавьте скрытый ввод помимо кнопки, которая отслеживает количество кликов. Установите это значение для вашей переменной button_press, увеличьте и установите новое значение для скрытого ввода. Это увеличит количество, даже когда страница обновляется при каждом клике.

Я сделал переменную нажатия кнопки статической и все работало нормально. Ключ должен был сохранить состояние сеанса, и сделав его статичным, я смог бы его достичь.

Самый эффективный способ сделать это не на стороне сервера, а на стороне клиента. На первом document.load создайте пару метка / текстовое поле.
Когда кнопка нажата, вызовите функцию javascript, которая находится в вашем.aspx, которая создаст пару метка / текстовое поле.
Это предотвратит несколько обращений к серверу только ради добавления пары метка / текст.
Наконец, я уверен, что вы хотите отправить эти данные на сервер. Вы можете использовать JSON для построения ввода данных в текстовых полях и передавать всю эту информацию одним нажатием другой кнопки, называемой "отправить данные", с помощью функции jQuery, которая обращается к серверу, или даже использовать XMLHttpRequest javascript для передачи данных от клиента к сервер.
Я знаю, это звучит сложно, но вы могли бы попробовать.

Другие вопросы по тегам