我需要一种方法来动态收集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服务器端的所有文本框?
答案 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
}
}
}