在asp.net中在运行时添加文本框

时间:2010-01-28 17:49:14

标签: asp.net textbox runtime at-command

我需要动态创建文本框,因为用户指定了no ..实际上一行中有两个文本框..user指定不需要行...因为指定的文本框(每行两个)应该添加到表单中我需要阅读稍后输入的文字....什么是最好的方法?

3 个答案:

答案 0 :(得分:2)

如果文本框的数量是常量但行数是动态的,则使用GridView。然后将gridview绑定到用户指定的长度的列表或数组。然后gridview将呈现指定的行,您可以在回发时从文本框中获取值。

答案 1 :(得分:0)

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

注意:

  • “控制”显然是家庭控制文本框在您的情况下的位置,例如一个控件。
  • 您需要添加控件 CreateChildControls或在Page_Init上 所以他们被添加到正确的位置 在页面生命周期中。

答案 2 :(得分:0)

要动态地向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是数字)为每个标签提供唯一的ID。因为我想在提交表单时扫描所有文本框以提取其内容,我给每个文本框提供一个“XTestN”形式的I​​D(其中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,其中有多个面板用于输入。并且所有都是动态完成的。显然,网格不起作用,也不会像其他人所建议的那样只向控制树添加控件。