C#中与jQuery.parents(Type)相对应的方法是什么?

5
在jQuery中,有一个很酷的函数叫做.parents('xx'),它使我能够在DOM树中的某个对象开始,并向上搜索DOM以找到特定类型的父对象。
现在我正在寻找在C#代码中实现相同功能的方法。我有一个asp.net面板,有时它位于另一个父面板中,甚至有时位于2或3个父面板中,我需要通过这些父面板向上移动,最终找到我要查找的UserControl。
在C# / asp.net中是否有简单的方法来实现这一点?
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,以创建一个更好的版本。

这不是颠倒了吗?如果我没记错,楼主要求向上搜索,但这是向下搜索。 - ChrisWue
谢谢,根据您的代码思路,我创建了一个完全符合我的需求的东西。 - Tys

2
你应该能够使用ControlParent属性:
private Control FindParent(Control child, string id) 
{
    if (child.ID == id)
        return child;
    if (child.Parent != null)
        return FindParent(child.Parent, id);
    return null;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接