当前位置:  开发笔记 > 编程语言 > 正文

在webform中查找控件

如何解决《在webform中查找控件》经验,为你挑选了1个好方法。

我有一个Web内容表单,需要访问内容面板中的控件.我知道有两种访问控件的方法:

    TextBox txt = (TextBox)Page.Controls[0].Controls[3].Controls[48].Controls[6]

    通过编写一个搜索所有控件的递归函数.

还有其他更简单的方法,因为Page.FindControl在这种情况下不起作用.我问的原因是我感觉像Page对象或Content Panel对象应该有一个方法来查找子控件,但找不到类似的东西.



1> andleer..:

问题是FindControl()不会遍历某些控制子项,例如模板化控件.如果您使用的控件存在于模板中,则无法找到它.

所以我们添加了以下扩展方法来处理这个问题.如果您不使用3.5或想要避免使用扩展方法,则可以使用这些方法创建通用库.

您现在可以通过编码获得您所需的控件:

var button = Page.GetControl("MyButton") as Button;

扩展方法为您执行递归工作.希望这可以帮助!

public static IEnumerable Flatten(this ControlCollection controls)
{
    List list = new List();
    controls.Traverse(c => list.Add(c));
    return list;
}

public static IEnumerable Flatten(this ControlCollection controls,     
    Func predicate)
{
    List list = new List();
    controls.Traverse(c => { if (predicate(c)) list.Add(c); });
    return list;
}

public static void Traverse(this ControlCollection controls, Action 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 GetControls(this Control control)
{
    return control.Controls.Flatten();
}


哇,这应该是框架的一部分!
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有