Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取自定义UserControl中的所有文本框?_C#_Asp.net_User Controls - Fatal编程技术网

C# 如何获取自定义UserControl中的所有文本框?

C# 如何获取自定义UserControl中的所有文本框?,c#,asp.net,user-controls,C#,Asp.net,User Controls,我需要一种在ASP.net WebForms服务器端动态收集自定义UserContorl中所有文本框的方法 我认为这会奏效: foreach (var control in Page.Controls) { var textBox = control as TextBox; if (textBox != null && textBox.MaxLength > 0) { // stuff here } } 但它并没有像我想的那

我需要一种在ASP.net WebForms服务器端动态收集自定义UserContorl中所有文本框的方法

我认为这会奏效:

foreach (var control in Page.Controls)
{
    var textBox = control as TextBox;
    if (textBox != null && textBox.MaxLength > 0)
    {
        // stuff here
    }
}
但它并没有像我想的那样,我也不知道还有什么其他方法可以得到这些信息


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

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

private IEnumerable FindControl(ControlCollection控件)
{
列表结果=新列表();
foreach(控件中的var控件)
{
var textBox=控件作为textBox;
if(textBox!=null&&textBox.MaxLength>0)
{ 
结果。添加(文本框);
} 
else if(textBox==null)
{
results.AddRange(FindControls(control.Controls));
}
}
返回结果;
}

得到结果后,您可以迭代这些结果并执行任何需要执行的操作

看来递归是一种方法:

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

我认为您需要尝试FindControl方法…Find control有效如果您知道控件的名称,我需要所有控件良好的点-首先在用户控件上使用FindControl,然后循环遍历textbox类型的所有控件?
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
        }
    }
}