5

jQuery には .parents('xx') というクールな関数があり、DOM ツリーのどこかにあるオブジェクトから開始し、DOM を上方向に検索して特定の型の親オブジェクトを見つけることができます。

今、私は C# コード内で同じことを探しています。asp.net panel別の親パネルにある場合もあれば、2 つまたは 3 つの親パネルにある場合もあり、探している を最終的に見つけるために、これらの親を上に移動する必要がありますUserControl

C#/asp.net でこれを行う簡単な方法はありますか?

4

2 に答える 2

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 に答える
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 に答える