2009-08-10 7 views
25

पेज_इनिट ईवेंट को संभालने या किसी पृष्ठ की ऑनइनिट विधि को ओवरराइड करने के बीच, कौन सा उपयोग करने के लिए बेहतर है? धन्यवाद।पेज_इनिट बनाम ऑनइनिट

उत्तर

17

मुझे एक साल पहले यह सवाल था, मैं ऑन_एक्स घटनाओं के विरोध में ओवरराइडिंग पर बस गया। यहां लेख है जो मैंने पेशेवरों और विपक्ष को कवर किया है: http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx

+0

धन्यवाद निक के साथ ऐसा नहीं कर सकता! वह एक अच्छा लेख था। मैं ऐसा कुछ ढूंढ रहा था। इसकी सराहना करते हैं। : =) –

1

http://objectmix.com/dotnet/251824-oninit-page_init.html पर एक अच्छा उत्तर है।

http://www.justskins.com/forums/page_init-and-page_load-59045.html का एक और अधिक जवाब है।

यदि ऑटोवेन्टवायरअप गलत पर सेट है तो आपको ऑनइनिट को ओवरराइड करने की आवश्यकता है क्योंकि पेज_इनिट स्वचालित रूप से उपलब्ध नहीं है।

10

आधार प्रकार की विधि को ओवरराइड करना बेहतर है क्योंकि एक वर्चुअल कॉल एक विधि समूह में किसी ईवेंट को जोड़ने वाले प्रतिनिधि को बनाने से सरल और साफ है।

इसके अलावा, AutoEventWireup पर true पर सेट होने का अर्थ है कि आप अपने पेज कोड के पार्सिंग में ओवरहेड पेश कर रहे हैं क्योंकि एएसपी.नेट को आपके लिए निष्पादन समय पर किसी भी प्रतिनिधि को बनाना होगा।

+2

प्लस आप यह चुनने के लिए चुनते हैं कि बेस विधि को कब और कब कॉल करना है, यह भी पेज_लोड शैली –

3

मूल रूप से इन दो अपहरणों में कोई अंतर नहीं है। है पृष्ठ कक्षा में OnInit में क्या किया जाता है यही कारण है कि:

protected internal override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (this._theme != null) 
    { 
     this._theme.SetStyleSheet(); 
    } 
    if (this._styleSheet != null) 
    { 
     this._styleSheet.SetStyleSheet(); 
    } 
} 

अगर हम base.OnInit खुलेगा हम करेंगे से उस जगह जहां Page_Init निकाल दिया जाता है कि:

protected internal virtual void OnInit(EventArgs e) 
{ 
    if (this.HasEvents()) 
    { 
     EventHandler handler = this._occasionalFields.Events[EventInit] as EventHandler; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 
} 

तो मूल रूप से कोई इन दो दृष्टिकोणों में अंतर। हालांकि आपको आधार पर कॉल करने की आवश्यकता है। अगर आप ईवेंट के बजाय ओवरराइड का उपयोग करना चुनते हैं तो अपने ओवर्रिडेन विधि में पर क्लिक करें। और दूसरा अंतर यह है कि यदि आप ओवरराइड का उपयोग कर रहे हैं तो आप थीम लागू होने के बाद कुछ कोड चला सकते हैं।

सम्मान।

पीएस एकमात्र चीज जो मैं अनुशंसा करता हूं वह पूरे आवेदन के समान दृष्टिकोण का उपयोग करना है।

+0

हां वहाँ है - केवल ऑनऑक्स विधि को ओवरराइड करते समय आपके पास मूल विधि को कॉल करने का विकल्प होता है (या यहां तक ​​कि इसे कॉल करना भी है या नहीं)। यह थोड़ा नाइट-पिक्य लगता है, लेकिन कुछ मामलों में, यह महत्वपूर्ण हो सकता है। इसलिए मेरी सलाह: हमेशा ओवरराइड करें! –

+0

और मैंने उस क्षमता का उल्लेख किया है - "और एक और अंतर यह है कि यदि आप ओवरराइड का उपयोग कर रहे हैं तो आप थीम लागू होने के बाद कुछ कोड चला सकते हैं।" –

0

ओएनएक्स क्योंकि ज्यादातर एमएसडीएन के अनुसार व्युत्पन्न कक्षा में ईवेंट को संभालने के लिए पसंदीदा तकनीक है।

1

ऑनइनिट बेहतर है क्योंकि यह कक्षा स्तर की शुरुआत पर है जबकि पृष्ठ init में अनावश्यक प्रभाव हो सकता है क्योंकि आपको यह जांचना है कि यह पोस्टबैक है या नहीं।

संबंधित मुद्दे