简体   繁体   中英

How can I get all TextBoxes inside of a Custom UserControl?

I need a way to dynamically gather all of the TextBoxes inside of a custom UserContorl in ASP.net WebForms, server-side

I thought this would work:

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

But it doesn't do what I thought it would, and I don't see how else to get that information.

So, how can I dynamically get all of the textboxes on the server-side of a custom UserControl in ASP.net webforms?

You need a recursive method, because not all level 1 children are necessarily text boxes (depends on the control/container hierarchy in your user control):

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;
}

After you get the results you can iterate them and do whatever you need to do.

Looks like recursive is the way to go:

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
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM