C# equivalent of jQuery.parents(Type)
本文关键字:Type parents jQuery equivalent of | 更新日期: 2023-09-27 18:31:16
在jQuery中,有一个名为.parents('xx')的很酷的函数,它使我能够从DOM树中的某个对象开始,然后在DOM中向上搜索以查找特定类型的父对象。
现在我正在 C# 代码中寻找同样的东西。我有一个asp.net panel
有时位于另一个父面板中,有时甚至是 2 或 3 个父面板,我需要向上穿越这些父面板才能最终找到我正在寻找的UserControl
。
有没有一种简单的方法可以在 C#/asp.net 中做到这一点?
编辑:在重新阅读您的问题后,我根据帖子中的第二个链接对其进行了尝试:
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 创建一个更好的版本。
您应该能够使用 Control
的 Parent
属性:
private Control FindParent(Control child, string id)
{
if (child.ID == id)
return child;
if (child.Parent != null)
return FindParent(child.Parent, id);
return null;
}