ASP.net - 识别代码背后的特定控件

时间:2011-07-06 17:17:17

标签: c# asp.net controls textbox

我有一个页面,其中包含5个texbox,每个名称相似,但后缀为数字。例如:

tbNumber1,tbNumber2,tbNumber3等等。

之所以这样,是因为那些文本框是根据某些参数动态生成的。我永远不知道特定记录需要多少文本框。

如何循环播放这些texbox的文本内容?

我的第一直觉是做以下事情,但这显然不起作用:)

for (int i = 0; i <= 3; i++)
        {
            string foo = tbNumber+i.Text;
            //Do stuff
        }

Wahts是通过这些文本框的最佳方式吗?

感谢!!!

5 个答案:

答案 0 :(得分:4)

你可能会做这样的事情:

for( int i = 0; i < upperLimit; i++ )
{
    TextBox control = Page.FindControl("tbNumber" + i) as TextBox;
    if( control != null ) {
        // do what you need to do here
        string foo = control.Text;
    }
}

答案 1 :(得分:0)

如果您使用CheckBoxList控件,则应该能够遍历控件中的每个复选框。

foreach(var checkbox in checkboxlistcontrol)
{
  string name = checkbox.Text;
}

如果您没有使用CheckboxList控件,则可能需要考虑使用一个作为选项。

答案 2 :(得分:0)

可能会尝试类似

的内容
foreach(Control control in Page.Controls)
{
     //Do stuff
}

答案 3 :(得分:0)

如果您是动态生成它们,请在生成它们时将它们放在List<TextBox>中:

// in the Page_Load or whereever you generate the textboxes to begin
var boxes = new List<TextBox>();

for (int i = 0; i < numRecords /* number of boxes */; i++) {
  var newBox = new TextBox();
  // set properties here

  boxes.Add(newBox);
  this.Controls.Add(newBox);
}

现在,您可以在不使用繁琐的字符串技术的情况下遍历文本框:

foreach (var box in boxes) {
  string foo = box.Text;
  // stuff
}

答案 4 :(得分:0)

你需要的是一个递归的FindControl之类的函数。尝试这样的事情:

for (int i=0; i<3; i++)
{
    Control ctl = FindControlRecursive(Page.Controls, "tbNumber", i.ToString());
    if (ctl != null)
    {
        if (ctl is TextBox)
        {
            TextBoxControl tbc = (TextBox)ctl;
            // Do Something with the control here
        }
    }
}

private static Control FindControlRecursive(Control Root, string PrefixId, string PostFix)
{
    if (Root.ID.StartsWith(PrefixId) && Root.ID.EndsWith(PostFix))
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, PrefixId, PostFix);
        if (FoundCtl != null)
            return FoundCtl;
    }
    return null;
}