2011-01-13 10 views
8

मैं ग्लोबल.एक्सएक्स की PostAuthenticateRequest ईवेंट का उपयोग कैसे कर सकता हूं? मैं this tutorial का पालन कर रहा हूं और यह उल्लेख करता है कि मुझे PostAuthenticateRequest ईवेंट का उपयोग करना है। जब मैंने ग्लोबल.एक्सएक्स इवेंट जोड़ा, तो उसने दो फाइलें, मार्कअप और कोड-बैक फ़ाइल बनाई। यहाँ की सामग्री फ़ाइलGlobal.asax PostAuthenticateRequest ईवेंट बाध्यकारी कैसे होता है?

using System; 
using System.Web; 
using System.Web.Security; 
using System.Web.SessionState; 

namespace authentication 
{ 
    public class Global : System.Web.HttpApplication 
    {  
     protected void Application_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Session_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
     } 

     protected void Application_AuthenticateRequest(object sender, EventArgs e) 
     {  
     } 

     protected void Application_Error(object sender, EventArgs e) 
     {  
     } 

     protected void Session_End(object sender, EventArgs e) 
     {  
     } 

     protected void Application_End(object sender, EventArgs e) 
     {  
     } 
    } 
} 

कोड-पीछे अब जब मैं

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 

यह सफलतापूर्वक कहा जाता है प्रकार है। अब मैं जानना चाहता हूं कि PostAuthenticateRequest इस से जुड़ा है Application_OnPostAuthenticateRequest विधि? मैं विधि को किसी अन्य तरीके से कैसे बदल सकता हूं?

उत्तर

14

जादू ..., एक तंत्र Wireup बुलाया ऑटो ईवेंट, इसी कारण से आप

Page_Load(object sender, EventArgs e) 
{ 
} 
अपने कोड-पीछे और विधि में

लिख सकते हैं स्वचालित रूप से पृष्ठ लोड होने बुलाया जाएगा।

MSDN description for System.Web.Configuration.PagesSection.AutoEventWireup property:

हो जाता है या यह बताते हैं कि ASP.NET पृष्ठों के लिए ईवेंट अपने आप घटना से निपटने के कार्यों से जुड़े हैं एक मूल्य तय करता है।

जब AutoEventWireuptrue है, संचालकों स्वचालित रूप से उनके नाम और हस्ताक्षर के आधार पर रन टाइम पर घटनाओं के लिए बाध्य कर रहे हैं। प्रत्येक घटना के लिए, एएसपी.नेट एक विधि की खोज करता है जिसे पैटर्न Page_eventname() के अनुसार नामित किया गया है, जैसे Page_Load() या Page_Init()। एएसपी.नेट पहले एक अधिभार की तलाश करता है जिसमें विशिष्ट घटना-हैंडलर हस्ताक्षर होता है (यानी, यह Object और EventArgs पैरामीटर निर्दिष्ट करता है)। यदि इस हस्ताक्षर के साथ एक ईवेंट हैंडलर नहीं मिला है, तो एएसपी.नेट एक अधिभार की तलाश करता है जिसमें कोई पैरामीटर नहीं है। this answer में अधिक जानकारी।

आप इसे करना चाहता था, तो स्पष्ट रूप से आप के बजाय निम्नलिखित

public override void Init() 
{ 
    this.PostAuthenticateRequest += 
     new EventHandler(MyOnPostAuthenticateRequestHandler); 
    base.Init(); 
} 

private void MyOnPostAuthenticateRequestHandler(object sender, EventArgs e) 
{ 
} 
+0

मैं एक घंटे बर्बाद किया है क्योंकि यह Intellisense में नहीं दिख रहा था और मैंने सोचा कि मैं किसी भी तरह घटना की सदस्यता के लिए हो सकता है लिखेंगे। घटना को कार्यान्वित करने के बारे में पूछने के बारे में पोस्ट करना था, लेकिन मैंने सोचा कि चलिए इसे आज़माएं और देखें कि मुझे कोई त्रुटि और आवाज मिलती है या नहीं! यह काम किया :) धन्यवाद वैसे भी – Tux

+6

सावधान रहें कि यानी। Application_Start या सत्र_स्टार्ट को केवल ऑटो इवेंट वायरअप तंत्र के माध्यम से संभाला जा सकता है, HttpAplication क्लास पर उनके लिए कोई स्पष्ट घटना नहीं है जिसे आप सब्सक्राइब कर सकते हैं। –

+0

मुझे यह बताने के लिए धन्यवाद। – Tux