C# 如何获取自定义UserControl中的所有文本框?
我需要一种在ASP.net WebForms服务器端动态收集自定义UserContorl中所有文本框的方法 我认为这会奏效: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 } } 但它并没有像我想的那
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
}
}
}