2009-01-26 10 views
6

क्या कोई तरीका है कि मैं वैश्विक ऑब्जेक्ट के भीतर से पृष्ठ ऑब्जेक्ट तक पहुंच सकता हूं Application_EndRequest फ़ंक्शन?Asp.Net Global.asax वर्तमान अनुरोधित पृष्ठ ऑब्जेक्ट तक पहुंच

मैं अनुरोध के अंत में एक लेबल का पाठ सेट करने की कोशिश कर रहा हूं लेकिन पृष्ठ तक पहुंचने से मुझे लगता है कि यह अधिक कठिन साबित हो रहा है।

protected void Application_BeginRequest(Object sender, EventArgs e) 

    { 

     Context.Items.Add("Request_Start_Time", DateTime.Now); 

    } 

    protected void Application_EndRequest(Object sender, EventArgs e) 
    { 

     TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]); 

     System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page; 
     if (page != null) 
     { 
      Label label = page.FindControl("lblProcessingTime") as Label; 
      if (label != null) 
      { 
       label.Text = String.Format("Request Processing Time: {0}", tsDuration.ToString()); 
      } 
     } 
    } 

पेज हमेशा यहाँ रिक्त है:

यहाँ मैं क्या है कि वर्तमान में नहीं काम कर रहा है है।

अग्रिम धन्यवाद।

उत्तर

6

शायद बेसपेज क्लास बनाने के लिए यह सबसे अच्छा है, जिससे आपके सभी पृष्ठों को उत्तराधिकारी होना चाहिए। फिर आप पेज के अनलोड ईवेंट के भीतर कोड डाल सकते हैं और कोई समस्या नहीं होगी।

+0

यह वास्तव में एक अच्छा विचार है। इसे डिजाइन में बदलाव की आवश्यकता है, लेकिन यह नकारात्मक वोट, आईएमओ की गारंटी नहीं देता है। – casperOne

+0

धन्यवाद। मैंने सोचा कि यह एक और दृष्टिकोण को इंगित करने में मददगार होगा, जो शायद नहीं देखा जा सकता है। – Noldorin

+0

अच्छी कॉल नोलोडोरिन। मुझे लगता है कि यह सबसे अच्छा विचार होगा। यह सुनिश्चित करने के लिए भी एक मास्टर पेज होगा कि लेबल हमेशा वहां रहेगा क्योंकि ऐसा लगता है कि प्रत्येक पृष्ठ में एक ही लेबल होगा। –

0

आप इसे एप्लिकेशन_स्टार्ट और एप्लिकेशन_इंड में नहीं कर सकते हैं।

MSDN से:

Application_Start और Application_End तरीकों विशेष तरीकों कि HttpApplication घटनाओं का प्रतिनिधित्व नहीं करते हैं। एएसपी.नेट उन्हें एक बार एप्लिकेशन डोमेन के जीवनकाल के लिए बुलाता है, प्रत्येक एचटीपी अनुप्रयोग उदाहरण के लिए नहीं।

http://msdn.microsoft.com/en-us/library/ms178473.aspx

+2

यह एप्लिकेशन_स्टार्ट या एप्लिकेशन_इंड नहीं है, यह एप्लिकेशन_स्टार्टआरक्वेट और एप्लिकेशन_इंडरक्वेट है। –

1

अनुरोध के जीवन चक्र के इस स्तर पेज पहले ही प्रदान की जा चुकी है और पेज वस्तु पर अब उपलब्ध नहीं है। आपको पहले की घटना का उपयोग करने की आवश्यकता होगी।

कहा यही कारण है, वहाँ के रूप में इसके साथ कई मुद्दों कर रहे हैं मैं इस दृष्टिकोण की सिफारिश नहीं होगा:

आप FindControl का उपयोग कर रहे हैं। नियंत्रण का नाम बदलता है तो यह कोड तोड़ देगा।

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

यह कोड एक मास्टर पेज या पृष्ठ बेस क्लास में होना चाहिए जहां आप लेबल को एक प्रकार से सुरक्षित तरीके से एक्सेस कर सकते हैं।

+0

FindControl नहीं मिला अगर नहीं मिला, तो लेबल सिर्फ शून्य होगा। –

+1

हां लेबल शून्य हो जाएगा, कार्यक्षमता टूट जाएगी। मैं FindControl के उपयोग से घृणा करता हूं। 99% मामलों में इसका इस्तेमाल खराब डिजाइन के कारण होता है। आप जिस नियंत्रण को ढूंढने की कोशिश कर रहे हैं उसके दृढ़ता से टाइप किए गए उदाहरण की घोषणा करने के लिए लगभग हमेशा एक तरीका होगा। –

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