5

在 jQuery 中有一个很酷的函数叫做 .parents('xx') ,它使我能够从 DOM 树中的某个对象开始,然后在 DOM 中向上搜索以找到特定类型的父对象。

现在我在 C# 代码中寻找同样的东西。我有一个asp.net panel有时位于另一个父面板中,有时甚至位于 2 或 3 个父面板中,我需要向上遍历这些父面板以最终找到UserControl我正在寻找的。

在 C#/asp.net 中是否有一种简单的方法可以做到这一点?

4

2 回答 2

2

编辑:重读您的问题后,我根据帖子中的第二个链接对它进行了抨击:

public static T FindControl<T>(System.Web.UI.Control Control) where T : class
{
     T found = default(T);

     if (Control != null && Control.Parent != null)
     {
        if(Control.Parent is T)
            found = Control.Parent;
        else
            found = FindControl<T>(Control.Parent);
     }

     return found;
}

请注意,未经测试,只是现在弥补。

下面供参考。

有一个称为 FindControlRecursive 的通用函数,您可以在其中从页面向下遍历控件树以查找具有特定 ID 的控件。

这是来自http://dotnetslackers.com/Community/forums/find-control-recursive/p/2708/29464.aspx的实现

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
}

你可以这样使用:

var control = FindControlRecursive(MyPanel.Page,"controlId");

您也可以将其与以下内容结合使用:http ://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx以创建更好的版本。

于 2012-04-15T21:57:58.997 回答
2

您应该能够使用的Parent属性Control

private Control FindParent(Control child, string id) 
{
    if (child.ID == id)
        return child;
    if (child.Parent != null)
        return FindParent(child.Parent, id);
    return null;
}
于 2012-04-15T22:10:39.510 回答