добавление текстовых полей во время выполнения в asp.net

StackOverflow https://stackoverflow.com/questions/2156636

Вопрос

мне нужно создавать текстовые поля динамически, поскольку пользователь указывает номер..на самом деле в строке есть два текстовых поля..пользователь не указывает ни одной из необходимых строк..как указано, в форму следует добавить текстовые поля (по два в строке), а также мне нужно прочитать текст, введенный позже.... какой метод лучше всего??

Это было полезно?

Решение

Если количество текстовых полей постоянно, но количество строк является динамическим, используйте GridView.Затем привяжите GridView к списку или массиву указанной пользователем длины.Затем GridView отобразит указанные строки, и вы сможете получить значения из текстовых полей при обратной передаче.

Другие советы

Control.Controls.Add(new TextBox());

Примечания:

  • «Контроль», очевидно, будет родительским элементом управления расположением текстовых полей в вашем случае, например.контроль.
  • Вам нужно будет добавить элементы управления на CreateChildControls или на page_init, чтобы они были добавлены в правую точку в жизни страницы.

Чтобы динамически добавлять элементы управления на страницу aspx, выполните следующие действия.

Сначала добавьте заполнитель на странице ASPX:

<asp:PlaceHolder runat="server" id="AssessCanvas" />

Мой называется «AssessCanvas».Далее добавляем сами элементы управления.Вот код, который я использую в методах, вызываемых Page_Load, для создания метки и текстового поля.Метка представляет собой запрос «Вес:», а текстовое поле используется для ввода значения веса (в этом примере я также включаю значение веса при создании поля):

Label aLbl = new Label { Text = "Weight: ", ID = ("WSLabel" + counter) };
counter++;
AssessCanvas.Controls.Add(aLbl);

TextBox aBox = new TextBox { ID = "XTest1", Columns = 5, Text = weight.ToString("##0.0"), Width = 50 };
AssessCanvas.Controls.Add(aBox);

Я использую «WSLabelN» (где N — число), чтобы присвоить уникальный идентификатор каждой метке.Поскольку мне нужно просканировать все мои текстовые поля, чтобы получить их содержимое при отправке формы, я даю каждому из них идентификатор формы «XTestN» (где N — уникальный идентификатор для каждого поля — здесь «XTest1 " говорит мне, что это поле веса).

Когда я готов обработать отправку формы, я делаю следующее:

// Look at each key submitted with the form - *some* of these will be my input text boxes
foreach (string aStr in form.AllKeys)
{
    // Is this an input text box?  Yes if it has "XTest" in it somewhere.
    int position = aStr.IndexOf("XTest");
    if (position > 0)
    {
        // The data entry fields for each input box follows the format: <ASP.NET Prefix>XTest<TID>
        // Here I get the tid so I know what to do with the value that was entered 
        short tid = BSDIUtil.StrToIntDef(aStr.Substring(position + 5));
        switch (tid)
        {
            case 1: SaveWeight(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            case 2: SaveJP3P1(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            ... etc...
         }
     }
}

В моей системе мне часто приходится размещать на странице несколько полей для сбора значений для одного элемента тестирования (в данном случае система взята из страницы фитнес-тестирования).Например, команда «SaveJP3P1» выше не вызывается так, как показано, поскольку она фактически извлекает данные из девять разные поля.Я упростил это для примера по понятным причинам.

Этот подход дает вам большой дело гибкости.На моей полной странице есть флажки, метки заголовков (например,метка с форматированием HTML/CSS в дополнение к тексту метки) и даже несколько DIVS для фитнес-тестов с несколькими панелями для их ввода.И все это делается динамически.Очевидно, что сетка не будет работать, как и простое добавление элемента управления в дерево элементов управления, как предлагали другие.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top