为了账号安全,请及时绑定邮箱和手机立即绑定

在ASP.NET中找到控件的更好方法

在ASP.NET中找到控件的更好方法

在ASP.NET中找到控件的更好方法我有一个复杂的ASP.NET窗体,在一个窗体中甚至有50-60个字段,比如Multiview,在MultiView中,我有一个GridView,在GridView内部,我有几个CheckBoxes.当前,我正在使用FindControl()方法并检索子ID。现在,我的问题是,是否有其他方法/解决方案可以在ASP.NET中找到嵌套控件。
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

像往常一样迟到。如果还有人对此感兴趣,那么就有一些相关的问题答案..我的递归扩展方法用于解决这个问题:

public static IEnumerable<T> FindControlsOfType<T>(this Control parent)
                                                        where T : Control{
    foreach (Control child in parent.Controls)
    {
        if (child is T)
        {
            yield return (T)child;
        }
        else if (child.Controls.Count > 0)
        {
            foreach (T grandChild in child.FindControlsOfType<T>())
            {
                yield return grandChild;
            }
        }
    }}


查看完整回答
反对 回复 2019-06-19
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

所有突出显示的解决方案都使用递归(这在性能上非常昂贵)。这里是没有递归的更干净的方法:

public T GetControlByType<T>(Control root, Func<T, bool> predicate = null) where T : Control {
    if (root == null) {
        throw new ArgumentNullException("root");
    }

    var stack = new Stack<Control>(new Control[] { root });

    while (stack.Count > 0) {
        var control = stack.Pop();
        T match = control as T;

        if (match != null && (predicate == null || predicate(match))) {
            return match;
        }

        foreach (Control childControl in control.Controls) {
           stack.Push(childControl);
        }
    }

    return default(T);}


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 496 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信