如何在Custom UserControl中获取所有TextBox?

时间:2014-08-01 23:27:19

标签: c# asp.net user-controls

我需要一种方法来动态收集ASP.net WebForms中自定义UserContorl内的所有TextBox,服务器端

我认为这样可行:

foreach (var control in Page.Controls)
{
    var textBox = control as TextBox;
    if (textBox != null && textBox.MaxLength > 0)
    {
        // stuff here
    }
}

但它没有按照我的想法行事,我也看不出如何获取这些信息。

那么,如何动态获取ASP.net webforms中自定义UserControl服务器端的所有文本框?

2 个答案:

答案 0 :(得分:4)

您需要一个递归方法,因为并非所有1级子级都必须是文本框(取决于用户控件中的控件/容器层次结构):

private IEnumerable<TextBox> FindControls(ControlCollection controls)
{
  List<TextBox> results = new List<TextBox>();
  foreach(var control in controls) 
  {
     var textBox = control as TextBox;
     if (textBox != null && textBox.MaxLength > 0)
     { 
       results.Add(textBox);
     } 
     else if(textBox == null) 
     {
       results.AddRange(FindControls(control.Controls));
     }
  }

  return results;
}

获得结果后,您可以迭代它们并做任何您需要做的事情。

答案 1 :(得分:0)

看起来像递归是要走的路:

foreach (Control control in Page.Controls)
{
    DoSomething(control);
}

// And you need a new method to loop through the children
private void DoSomething(Control control)
{
    if (control.HasControls())
    {
        foreach(Control c in control.Controls)
        {
            DoSomething(c);
        }
    }
    else
    {
        var textBox = control as TextBox;
        if (textBox != null)
        {
            // Do stuff here
        }
    }
}