2012-08-07 25 views
6

पर सेट किया गया है यदि AutoEventWireup विशेषता false पर सेट की गई है, तो ईवेंट को मैन्युअल रूप से वायर्ड करने की आवश्यकता है। हालांकि, मुझे Page_PreInit आग लगने लगते हैं। मुझे लगता है कि मैं वायरअप को बहुत देर हो सकता है (एक बार हम पहले से ही Page_PreInit से पहले) हैं, लेकिन मुझे यकीन नहीं है कि वायरअप को और कहां रखा जाए।मैन्युअल रूप से पेज_PreInit ईवेंट को वायरिंग कर रहा है, ऑटोएवेंटवायरअप को

उदाहरण के लिए ...

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e) 
    PreInit += new EventHandler(Page_PreInit); 
    Load += new EventHandler(Page_Load); 
} 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    Response.Write("Page_PreInit event fired!<br>"); //this is never reached 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Write("Page_Load event fired!<br>"); 
} 

में ऊपर कोड परिणाम "Page_Load घटना निकाल दिया!" प्रदर्शित किया जा रहा है, लेकिन Page_PreInit से कुछ भी नहीं। मैंने वायरअप से पहले और बाद में की कोशिश की, और इसका कोई प्रभाव नहीं पड़ा।

ग्राफ here दिखाया का कहना है कि OnInit विधि वास्तव में PreInit घटना के बाद आता है। इस बात को ध्यान में रखते हुए, मैंने OnPreInit ओवरराइड करने की कोशिश की और एक ही काम किया --- कोई प्रभाव नहीं।

MSDN लेख here स्पष्ट रूप से कहा गया है कि false करने के लिए AutoEventWireup सेट की स्थिति में, घटनाओं एक ओवरराइड OnInit में तार हो सकता है। उदाहरण का उपयोग वे Page_Load है, और निश्चित रूप से यह मेरे लिए करता है जैसे काम करता है, लेकिन वे यह नहीं संबोधित करते हैं कि यह Page_PreInit ईवेंट के लिए काम नहीं कर रहा है।

मेरा प्रश्न है: मैं Page_PreInit घटना false करने के लिए सेट AutoEventWireup के मामले में ऊपर तार कैसे मिल सकता है?

मुझे लगता है कि MSDN page पर सूचीबद्ध विकल्प हैं, जैसे पेज के कन्स्ट्रक्टर का उपयोग करना। मैं विशेष रूप से जानना चाहता हूं कि OnInit के साथ उनका सुझाव कैसे दिया जाए।

+0

आप निर्माता में यह करने के लिए मिल गया है या 'base.OnInit' को कॉल करने से पहले। – Strelok

+0

दुर्भाग्यवश आधार से ऊपर की रेखाएं डालने .ऑन इनिट (ई) का कोई प्रभाव नहीं पड़ता है, और पहले की घटना (जैसे OnPreInit) का लक्ष्य अभी भी पेज_PreInit ईवेंट तक नहीं पहुंच जाएगा। – CptSupermrkt

उत्तर

10

OnPreInit() विधि का मूल कार्यान्वयन PreInit ईवेंट को बढ़ाने के लिए ज़िम्मेदार है। चूंकि आपका ओवरराइड कॉल से पहले PreInit हैंडलर को पंजीकृत करने से पहले, इसे वास्तव में नहीं कहा जाएगा।

protected override void OnPreInit(EventArgs e) 
{ 
    PreInit += new EventHandler(Page_PreInit); 
    Load += new EventHandler(Page_Load); 

    // And only then: 
    base.OnPreInit(e); 
} 
+0

यूप ने ऐसा किया। धन्यवाद। – CptSupermrkt

+0

यह ध्यान दिया जाना चाहिए कि यह कोड 'OnInit' के बजाय 'OnPreInit' ओवरराइड कर रहा है। – Trisped

0

प्रारंभ क्षेत्र में सभी घटना जोड़ें::

हैंडलर पंजीकृत के बाद आधार वर्ग 'विधि कॉल करके देखें

public WebName() 
     { 
     this.event+=TAB Key 
     }