2009-06-22 8 views
26

जैसे ही विषय पूछता है।मैं एएसपी.NET वेबसाइट (वेब ​​एप्लिकेशन नहीं) में उपयोगकर्ता नियंत्रण से अभिभावक पृष्ठ कैसे प्राप्त कर सकता हूं

संपादित करें 1

शायद यह कुछ समय जबकि अनुरोध उपयोगकर्ता नियंत्रण में माता पिता के पेज के लिए एक संदर्भ स्टोर करने के लिए कार्रवाई की जा रही है संभव है?

+2

संदर्भ को स्टोर करने की कोई आवश्यकता नहीं है- प्रत्येक उपयोगकर्ता नियंत्रण पहले से ही एक पृष्ठ संपत्ति का खुलासा करता है। –

उत्तर

55
this.Page 

या बस से के बारे में कहीं भी:

Page page = HttpContext.Current.Handler as Page 
7

आप जनक संपत्ति

अगर आप इस की जरूरत है पृष्ठ पर एक नियंत्रण लगाने के लिए तो आप उपयोग कर सकते हैं का उपयोग कर सकते

Label lbl_Test = (Label)Parent.FindControl("lbl_Test"); 
11

मैं उस उपयोगकर्ता के नियंत्रण के बारे में कुछ भी जानने के लिए उपयोगकर्ता नियंत्रण के किसी भी अच्छे कारण के बारे में नहीं सोच सकता क्योंकि यह उपयोगकर्ता नियंत्रण होना चाहिए इसके संदर्भ से अनजान है और इस बात पर ध्यान दिए बिना कि यह किस पृष्ठ पर है।

कहा जा रहा है कि आप this.Page का उपयोग कर सकते हैं।

+0

यह एक अच्छा मुद्दा है। अच्छी तरह से परिभाषित उपयोगकर्ता नियंत्रण उस पृष्ठ से पूरी तरह से स्वतंत्र होना चाहिए जिस पर वे हैं। – jtate

+4

यदि प्रश्न में आवेदन एक सिलोएड एप्लिकेशन है और सभी पेज बेसपेज क्लास से प्राप्त होते हैं और आपको उस बेसपेज तक पहुंचने की आवश्यकता होती है तो यह पृष्ठ पूरी तरह से स्वीकार्य समाधान है क्योंकि उस एप्लिकेशन के सभी पृष्ठ उस बेसपेज और नियंत्रण से प्राप्त होंगे पूरी तरह से उस आवेदन के लिए परिभाषित किया जाएगा। – cavillac

+1

इस के लिए एक अच्छा उपयोग केस पेज का उपयोग करना है। संग्रह संग्रह, जिसका उपयोग उन वस्तुओं को संग्रहीत करने के लिए किया जा सकता है जिनका उपयोग Asp.net पृष्ठ प्रसंस्करण चक्र के जीवनकाल के लिए किया जाता है। आप प्रत्येक उपयोगकर्ता नियंत्रण में सामान्य वस्तुओं को पुनः लोड करने से बच सकते हैं। – humbads

0

प्रत्येक नियंत्रण में एक मूल संपत्ति है जिसका उपयोग आप माता-पिता तक पहुंचने के लिए कर सकते हैं।

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Write(this.Parent.ID); 
} 

संपादित करें: निर्भर करता है पेज के जीवन चक्र की घटनाओं आप संदर्भ स्टोर करने के लिए और कहा कि संदर्भ संग्रहीत करना चाहते हैं क्या उपयोग में से एक है जिस पर। हालांकि संदर्भ हमेशा उपलब्ध है

2

मैंने हमेशा इसका इस्तेमाल किया। System.Web.UI.UserControl में पेज।

या जब तक आप किसी ऑब्जेक्ट का सामना नहीं करते हैं तब तक आप हमेशा माता-पिता पर एक रिकर्सिव कॉल कर सकते हैं। overkill की

तरह हालांकि ...

protected Page GetParentPage(Control control) 
{ 
    if (this.Parent is Page) 
     return (Page)this.Parent; 

    return GetParentPage(this.Parent); 
} 
+0

यह 'StackOverFlowException' का कारण बन सकता है ... – Moumit

2

मैं जिस तरह से यह करने के लिए मिल गया एक इंटरफेस बनाने के लिए, कि इंटरफ़ेस को लागू, this.Page नियंत्रण से पेज प्राप्त करने के लिए उपयोग करते हैं, के लिए यह डाली है इंटरफ़ेस, फिर विधि को कॉल करें।

1

आप उस तरह NamingContainer का उपयोग करना चाहिए:

 try 
     { 
      if (!string.IsNullOrWhiteSpace(TargetCtrlID)) 
      { 
       var ctrl = NamingContainer.FindControl(TargetCtrlID); 
       if(ctrl != null) 
        Console.Write("'" + ctrl.ClientID + "'"); 
      } 
     } 
     catch 
     { 

     } 
0

उपयोगकर्ता नियंत्रण में एक प्रतिनिधि बनाएं और फिर उसे अपने जनक पृष्ठ से एक विधि निर्दिष्ट करते हैं।

class MyUserControl : UserControl 
{ 
    delegate object MyDelegate(object arg1, object arg2, object argN); 
    public MyDelegate MyPageMethod; 

    public void InvokeDelegate(object arg1, object arg2, object argN) 
    { 
    if(MyDelegate != null) 
     MyDelegate(arg1, arg2, argN); //Or you can leave it without the check 
             //so it can throw an exception at you. 
    } 
} 

class MyPageUsingControl : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    if(!Page.IsPostBack) 
     MyUserContorlInstance.MyPageMethod = PageMethod; 
    } 

    public object PageMethod(object arg1, object arg2, object argN) 
    { 
    //The actions I want 
    } 
} 
संबंधित मुद्दे