如何在自定义UserControl中获取所有TextBox?

Joe*_*ack 2 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
    }
}
Run Code Online (Sandbox Code Playgroud)

但是它并没有达到我的预期,并且我也看不到如何获得这些信息。

因此,如何在ASP.net Webforms中动态获取自定义UserControl的服务器端的所有文本框?

Mar*_* N. 5

您需要一种递归方法,因为并非所有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;
}
Run Code Online (Sandbox Code Playgroud)

获得结果后,您可以迭代它们并执行所需的任何操作。