2009-07-08 5 views
0

n ASP.NET Wie finde ich die Steuerelement-ID einer TextBox, die in einer DetailsView verschachtelt ist, die dann in einem AJAX UpdatePanel-Steuerelement verschachtelt ist?In ASP.NET wie finde ich die Steuerelement-ID einer TextBox, die in einer DetailsView geschachtelt ist, die dann in einem AJAX UpdatePanel-Steuerelement verschachtelt ist?

Die heirachy ist: UpdatePanel1 -> dvContentDetail (Details Control) -> TextBox2

ich so etwas wie die versucht haben folgende sondern sagt nur, dass das Objekt nicht gefunden wird:

UpdatePanel1.FindControl("dvContentDetail").FindControl("TextBox2").ClientID 
+0

kann u plz mir sagen, wo u Kontrolle zu finden .. kann man ur page code ... –

+0

Ich denke, was Sie versuchen, bekommen Kontrolle ist nicht an der richtigen Stelle ... Ich denke, Sie müssen Kontrolle in DetailsView Databound-Event, wenn Sie die Kontrolle bekommen und einige Werte .... –

+0

Ja, ich bekomme ein besseres Ergebnis, wenn ich versuche, das Steuerelement zu finden, nachdem es datengebunden wurde. – cyberbobcat

Antwort

1

Es besteht keine Notwendigkeit Kontrolle von Update zu finden, da diese Kontrollen direkt zur Verfügung, so dass Sie Code wie folgt sein ...

TextBox TextBox2 = (TextBox)dvContentDetail.FindControl("TextBox2"); 
+0

Das hat nicht funktioniert - die Fehlermeldung "Objektreferenz ist nicht auf eine Instanz eines Objekts gesetzt" wurde angezeigt. – cyberbobcat

+0

Das hat funktioniert, nachdem ich den Code an die richtige Stelle gesetzt hatte! - dh nachdem die Kontrolle datengebunden war. - Vielen Dank. – cyberbobcat

0

Sie könnten Versuchen Sie etwas wie den folgenden Code. Aber wenn Sie wissen, die Hierarchie ist nicht gehen zu ändern, wäre es besser, eine Reihe von "FindControl" -Anrufe zu tun. Um die richtige Hierarchie zu ermitteln, debuggen Sie die App und durchsuchen Sie die Kontrollhierarchie.

public static T FindControlRecursiveInternal<T>(Control startingControl, string controlToFindID) where T : Control 
{ 
    if (startingControl == null || String.IsNullOrEmpty(controlToFindID)) 
     return (T)null; 

    Control foundControl = startingControl.FindControl(controlToFindID); 
    if (foundControl == null) 
    { 
     foreach (Control innerControl in startingControl.Controls) 
     { 
      foundControl = FindControlRecursiveInternal<T>(innerControl, controlToFindID); 
      if (foundControl != null) 
       break; 
     } 
    } 

    return (T)foundControl; 
} 
Verwandte Themen