добавление текстовых полей во время выполнения в asp.net - PullRequest
0 голосов
/ 28 января 2010

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

Ответы [ 3 ]

2 голосов
/ 28 января 2010

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

0 голосов
/ 28 января 2010

Чтобы динамически добавить элементы управления на страницу 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 для фитнес-тестов с несколькими панелями для их ввода. И все это делается динамически. Очевидно, что сетка не будет работать и не добавит элемент управления к дереву элементов управления, как предлагали другие.

0 голосов
/ 28 января 2010
Control.Controls.Add(new TextBox());

Примечания:

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