सबसे पहले, आपको पता होना चाहिए कि MasterPages वास्तव में पेज के अंदर बैठते हैं। इतना है कि एक मास्टरपेज लोड इवेंट वास्तव में आपके एएसपीएक्स लोड इवेंट के बाद बुलाया जाता है।
इसका मतलब है, पेज ऑब्जेक्ट वास्तव में नियंत्रण पदानुक्रम में उच्चतम नियंत्रण है।
तो, यह जानकर, इस तरह के घोंसले वाले वातावरण में किसी भी नियंत्रण को खोजने का सबसे अच्छा तरीका, एक पुनरावर्ती कार्य लिखना है जो हर नियंत्रण और बाल नियंत्रण के माध्यम से लूप करता है जब तक कि वह आपको ढूंढ न सके। इस मामले में, आपके मास्टरपेज वास्तव में मुख्य पृष्ठ नियंत्रण के बाल नियंत्रण हैं।
आप इस तरह का कोई नियंत्रण अंदर से मुख्य पृष्ठ वस्तु को पाने:
सी #:
this.Page;
VB.NET
Me.Page
मुझे लगता है कि आम तौर पर नियंत्रण की क्लास FindControl() विधि, सुंदर बेकार है के रूप में पर्यावरण हमेशा नीडिंत है।
क्योंकि यदि यह है, तो मैंने नियंत्रण कक्षा का विस्तार करने के लिए .NET की 3.5 नई एक्सटेंशन सुविधाओं का उपयोग करने का निर्णय लिया है।
, कोड के नीचे (VB.NET) का उपयोग कर कहते हैं में, अपने AppCode फ़ोल्डर से, आपके सभी नियंत्रण अब FindByControlID को फोन करके एक पुनरावर्ती खोज peform जाएगा()
Public Module ControlExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function FindControlByID(ByRef SourceControl As Control, ByRef ControlID As String) As Control
If Not String.IsNullOrEmpty(ControlID) Then
Return FindControlHelper(Of Control)(SourceControl.Controls, ControlID)
Else
Return Nothing
End If
End Function
Private Function FindControlHelper(Of GenericControlType)(ByVal ConCol As ControlCollection, ByRef ControlID As String) As Control
Dim RetControl As Control
For Each Con As Control In ConCol
If ControlID IsNot Nothing Then
If Con.ID = ControlID Then
Return Con
End If
Else
If TypeOf Con Is GenericControlType Then
Return Con
End If
End If
If Con.HasControls Then
If ControlID IsNot Nothing Then
RetControl = FindControlByID(Con, ControlID)
Else
RetControl = FindControlByType(Of GenericControlType)(Con)
End If
If RetControl IsNot Nothing Then
Return RetControl
End If
End If
Next
Return Nothing
End Function
End Module
यह पूरी तरह से काम करता है। धन्यवाद। –
+1 धन्यवाद यह मुझे – leen3o
+1 में भी मदद करता है मुझे पता है कि यह 5 साल की तरह है, लेकिन इस विधि ने मुझे कुछ सिरदर्द बचाया, धन्यवाद! – psoshmo