Questo è il VB.Codice NET che ha funzionato per me:
<Extension()> _
Function FindChildControlById(ByVal controlToStartWith As Control, ByVal controlIdToFind As String) As Control
If controlToStartWith Is Nothing Then Return Nothing
If controlToStartWith.ID = controlIdToFind Then Return controlToStartWith
For Each childControl As Control In controlToStartWith.Controls
Dim resCtrl As Control = FindChildControlById(childControl, controlIdToFind)
If resCtrl IsNot Nothing Then Return resCtrl
Next childControl
Return Nothing
End Function ' Function FindChildControlById(ByVal controlToStartWith As Control, ByVal controlIdToFind As String) As Control
Il credito va a George per il codice VB.NET iniziale. L'ho modificato solo un po ', con 2 modifiche funzionali: il mio non ha errori se/quando null/Nothing è passato come controllo di input, e il mio è implementato come estensione. Le mie altre 3 modifiche minori non influiscono sulla funzionalità, ma per me sono state semplificazioni del codice. Ma so che è molto soggettivo.
Quindi questo metodo può essere utilizzato con:
Dim c1 As Control = Page.FindChildControlById("aspControlID")
E se si desidera convertire in una specifica classe di figlio di un controllo, in questo modo:
Dim c1 As Control = Page.FindChildControlById("aspControlID")
Dim c As HyperLink = TryCast(c1, HyperLink)
Aggiornamento: La mia funzione è ora chiamato 'FindChildControlById' (precedentemente era 'FindMiControl'). Mi è piaciuto il suggerimento di SpeedNet meglio.
fonte
2016-03-01 19:30:36
Il modo in cui Microsoft ha implementato questo è uno scherzo, dovrebbe funzionare. Oh hai una masterpage? Che ne dici di 500 pagine master annidate? Il metodo dovrebbe capirlo e fare ciò che è necessario per trovare il controllo, punto. –
Sai che stai usando "dovrebbe" e "Microsoft" nello stesso pensiero? – user1566694