2010-12-09 7 views
2

Gibt es eine einfache Möglichkeit, ein Steuerelement in ASP.NET durch ID (in einem beliebigen geschachtelten Container) zu finden? Anders als den ganzen Steuerbaum durchqueren.Wie finden Sie die Kontrolle auf Seite von ID

So etwas wie dieses Beispiel:

TextBox tb = new TextBox() { ID = "textboxId"}; 
panel3.Controls.Add(tb); 

Und in anderen Methode/Klasse:

TextBox nameTextbox = MethodToFindControl("textboxId") as TextBox; 

Antwort

3

Nein ... Sie haben alle Kontrollen Baum zu durchlaufen, bis Sie die Kontrolle finden dann durchqueren Sie stoppen , sollte Ihre Methode (MethodToFindControl) eine rekursive Methode sein, die zwei Argumente akzeptiert: den Stammcontainer (meistens die Seite) und die ID des zu suchenden Steuerelements.

+1

Siehe http://www.codinghorror.com/blog/2005/06/recursive-pagefindcontrol.html für ein Beispiel für eine Funktion – Lareau

+0

Danke, aber ich weiß, wie man Baum durchquert (wie in Frage erwähnt - ich bin Suche nach einer anderen Methode). –

+0

Nun .. ich denke, das ist die richtige Antwort (aber ich kannte diese Methode früher), also muss ich es akzeptieren :) –

5

Wenn ich Ihre Frage richtig verstanden habe, können Sie Methode Findcontrol verwenden wie folgt:

TextBox nameTextbox = (TextBox) panel3.FindControl ("textboxId");

+1

Das wird kein Steuerelement in "jedem verschachtelten Container" finden, wie die Frage fragt. FindControl ist nicht rekursiv. – ProfK

1

Falls Sie das Steuerelement nicht finden können, indem Sie findcontrol deklarieren Sie die entsprechende td/panel als Server-Steuerelement und dann sollten Sie in der Lage sein, die gewünschte Steuerung innerhalb td oder Panel Element leicht zu finden.

DirectCast(tdMultiCnstrTypCode.FindControl("BBIMultiConsCode" & cnt + 1), DropDownList) 

Dieser Ansatz ist einfacher als das Durchsuchen aller Steuerelemente und untergeordneten Steuerelemente der Seite.

Verwandte Themen