का उपयोग कर प्रोग्राम उपयोगकर्ता को प्रोग्रामेटिक रूप से लोड करें मैं गतिशील रूप से किसी पृष्ठ पर वेब उपयोगकर्ता नियंत्रण जोड़ रहा हूं। LoadControl
विधि का उपयोग करना जो केवल .ascx
पर इंगित करने वाला वर्चुअल पथ लेता है, वह बहुत अच्छी तरह से काम करता है। हालांकि, LoadControl
का अधिभार जो एक प्रकार और पैरामीटर की एक सरणी लेता है, मुझे कुछ सिरदर्द पैदा कर रहा है।लोडकंट्रोल (प्रकार, ऑब्जेक्ट())
वेब उपयोगकर्ता नियंत्रण अपेक्षित के रूप में तत्काल है, लेकिन वेब उपयोगकर्ता नियंत्रण में निहित नियंत्रण शून्य हैं और जैसे ही मैं उनके साथ काम करने की कोशिश करता हूं, मुझे अपवाद मिलता है। अजीब, क्योंकि यह LoadControl
के पहले संस्करण का उपयोग करते समय काम कर रहा है।
वेब उपयोगकर्ता नियंत्रण, सरल, एक Literal
नियंत्रण के साथ:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="MyControl.ascx.vb" Inherits="MyControl" %>
<asp:Literal ID="myLiteral" runat="server"></asp:Literal>
नियंत्रण 'कोड के पीछे:
Public Class MyControl
Inherits System.Web.UI.UserControl
Public Property Data As MyData
Public Sub New()
End Sub
Public Sub New(data As MyData)
Me.Data = data
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
myLiteral.Text = Data.ID ' The Literal is null, but ONLY when I use the second LoadControl() method!
End Sub
End Class
और .aspx
से प्रासंगिक कोड है जहाँ से मैं कोशिश कर रहा हूँ गतिशील रूप से नियंत्रण लोड करें:
Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
Dim x = LoadControl(GetType(MyControl), New Object() {New MyData With {.ID = 117}})
Page.Controls.Add(x)
' Using LoadControl("MyControl.ascx") works as expected!
End Sub
ऐसा लगता है कि आप पहले से बनाए गए ऑब्जेक्ट पर एक कन्स्ट्रक्टर का आह्वान कर रहे हैं - यह कैसे काम करता है? – jmoreno
@jmoreno चूंकि रचनाकार कुछ अतिरिक्त हबब के साथ केवल स्थिर तरीके हैं, यह सिर्फ काम करता है। –
यहां एक त्वरित डेमो है: http://ideone.com/IoqU2Z (कोड अधिकांश ऑनलाइन संपादकों पर विफल रहता है क्योंकि इसे कुछ सुरक्षा मांग की आवश्यकता होती है, लेकिन यह पूर्ण विश्वास के साथ चलता है)। –