fAR*_*cRY 12 c# asp.net webforms
我有一个Web内容表单,需要访问内容面板中的控件.我知道有两种访问控件的方法:
TextBox txt = (TextBox)Page.Controls[0].Controls[3].Controls[48].Controls[6]
还有其他更简单的方法,因为Page.FindControl
在这种情况下不起作用.我问的原因是我感觉像Page对象或Content Panel对象应该有一个方法来查找子控件,但找不到类似的东西.
and*_*eer 26
问题是FindControl()不会遍历某些控制子项,例如模板化控件.如果您使用的控件存在于模板中,则无法找到它.
所以我们添加了以下扩展方法来处理这个问题.如果您不使用3.5或想要避免使用扩展方法,则可以使用这些方法创建通用库.
您现在可以通过编码获得您所需的控件:
var button = Page.GetControl("MyButton") as Button;
Run Code Online (Sandbox Code Playgroud)
扩展方法为您执行递归工作.希望这可以帮助!
public static IEnumerable<Control> Flatten(this ControlCollection controls)
{
List<Control> list = new List<Control>();
controls.Traverse(c => list.Add(c));
return list;
}
public static IEnumerable<Control> Flatten(this ControlCollection controls,
Func<Control, bool> predicate)
{
List<Control> list = new List<Control>();
controls.Traverse(c => { if (predicate(c)) list.Add(c); });
return list;
}
public static void Traverse(this ControlCollection controls, Action<Control> action)
{
foreach (Control control in controls)
{
action(control);
if (control.HasControls())
{
control.Controls.Traverse(action);
}
}
}
public static Control GetControl(this Control control, string id)
{
return control.Controls.Flatten(c => c.ID == id).SingleOrDefault();
}
public static IEnumerable<Control> GetControls(this Control control)
{
return control.Controls.Flatten();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9643 次 |
最近记录: |