2009-03-05 18 views
1

Beim Debuggen eines Problems habe ich auf einem DetailsView ein Steuerelement in einer der Vorlagen finden, die ich etwas seltsam begegnet. Ich habe eine rekursive FindControl Extension implementiert, und es war, wo ein Steuerelement mit einer ID gefunden wurde, die sich komplett von der unterscheidet, nach der ich gesucht habe. Die Implementierung ruft im Grunde Findcontrol für das übergeordnete Steuerelement und anschließend, wenn nichts gefunden wurde, die rekursive Funktion für die untergeordneten Steuerelemente auf.FindControl-Implementierung

Ich begann mit Reflektor in das asp.net Code Graben und herausgefunden, wie die Umsetzung für eine checkboxs Findcontrol-Methode, wo (die in System.Web.UI.WebControls.CheckBoxList)

protected override Control FindControl(string id, int pathOffset) 
{ 
    return this; 
} 

Diese jetzt Alles macht Sinn, warum mein FindControl eine CheckBoxList gefunden hat, ich kann jedoch keine Gründe für diese Implementierung sehen, könnte mich jemand aufklären?

Antwort

2

Diese Implementierung von FindControl überschreibt eine rekursive Methode.

protected override Control FindControl(string id, int pathOffset) 
{ 
    return this; 
} 

überschreibt:

protected virtual Control FindControl(string id, int pathOffset) 
{ 
    string str; 
    this.EnsureChildControls(); 
if (!this.flags[0x80]) 
{ 
    Control namingContainer = this.NamingContainer; 
if (namingContainer != null) 
{ 
    return namingContainer.FindControl(id, pathOffset); 
} 

Ich würde spekulieren, es verwendet werden würde, wenn die rekursive Methode IE nicht erforderlich ist bekannt, dass die Stromsteuerung ist, die Sie für suchen.

extra Lesen MSDN

Control.FindControl sucht die aktuellen Benennungscontainer für einen Server Steuerung mit der angegebenen ID und einer ganzen Zahl ist, in dem Parameter pathOffset angegeben, die bei der Suche hilft. Sie sollten diese Version der FindControl-Methode nicht überschreiben .

ID
Der Identifikator für die Steuerung zu finden sind.

pathOffset
Die Anzahl der Betätigungseinrichtungen der Seitensteuerhierarchie benötigt, um einen Namenscontainer zu erreichen.

link