2013-07-02 3 views
6

कहो अंदर अपवाद, मैं एक आज़माएं/कैच ब्लॉक है कि यह कहीं कोड की एक बड़ी ब्लॉक समाहित और फिर मैं Response.Redirect जैसे कॉल करने की आवश्यकता है:Response.Redirect आज़माएं/कैच ब्लॉक

protected void ButtonGo_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     using(lockingMethod) 
     { 
      //Code... 

      //Somewhere nested in the logic 
      Response.Redirect(strMyNewURL); 

      //More code... 
     } 
    } 
    catch(Exception ex) 
    { 
     LogExceptionAsError(ex); 
    } 
} 

क्या इस मामले में ऐसा होता है कि Response.Redirect फेंकता धागा है, जो मेरा मानना ​​है कि एक कि विधि के लिए "घटनाओं के सामान्य प्रवाह" है समाप्त के बारे में एक अपवाद है, कुछ है, लेकिन यह एक त्रुटि के रूप में मेरे LogExceptionAsError में लॉग इन हो जाता है। तो मैं उत्सुक था, Response.Redirect बनाने के लिए कोई रास्ता नहीं है अपवाद फेंकना?

+0

strMyNewUrl का मूल्य क्या है ?? –

+3

संभावित डुप्लिकेट [क्या ऐसा कुछ है जो Response.Redirect को रीयल-कैच ब्लॉक के अंदर काम करने से रोकता है?] (Http://stackoverflow.com/questions/1063625/is-there-something-that-prevents-response-redirect-to -वर्क-अंदर-कोशिश-पकड़-ब्लॉक) –

+0

@ एमिटसिंह: मेरी परियोजना में कुछ अन्य पृष्ठ। मुझे यकीन नहीं है कि आपको इसकी आवश्यकता क्यों है? – c00000fd

उत्तर

4

Response.Redirect

Response.Redirect(strMyNewURL, false); 

के वैकल्पिक संस्करण के साथ प्रयास करें यह वर्तमान पृष्ठ लोड हो रहा है समाप्त कर देगा।

+0

घटनाक्रम 'पकड़ो (थ्रेडएबॉर्ट अपवाद)' इसे भी पकड़ लेगा। मैं स्पष्ट नहीं हूं कि इसे कैसे संभालना है? – c00000fd

+0

@ c00000fd:। मुझे लगता है कि :( – sarwar026

+1

ठीक बारे में निश्चित नहीं हूँ मैं सिर्फ एक डीबगर के साथ के माध्यम से कदम रखा 'ThreadAbortException' वास्तव में पकड़ा है जब' Response.Redirect' संसाधित किया जाता है तो अगर हैंडलर खाली छोड़ा जाता है, CLR होगा।। तब ले लो। – c00000fd

2

Response.Redirect इस अपवाद ऐसी है कि वह बिना क्रिया है फेंकने के माध्यम से वर्तमान निष्पादन की समाप्ति और इस तरह तत्काल पुनर्निर्देशन पूरा करता है। यह जानबूझकर और डिजाइन द्वारा है। आपको ज्यादातर मामलों में खुद को पकड़ना नहीं चाहिए - यह उद्देश्य को हरा देता है।

Response.Redirect(somewhere, false); 

कौन सा अपवाद नहीं बढ़ा देंगे: यदि आप पुनर्निर्देशित करने से पहले अपने कोड को क्रियान्वित करने को पूरा करना चाहते हैं, तो आप उपयोग कर सकते हैं अधिभार। यह तब तक अक्षम हो सकता है जब तक आपको रीडायरेक्ट करने से पहले कुछ और करने की आवश्यकता न हो।

ध्यान दें कि यह आम तौर पर एक विरोधी-पैटर्न-नियंत्रित तर्क प्रवाह है जो अपवाद फेंकने और पकड़ने के माध्यम से होता है ... हालांकि, इस विशेष विधि को ऐसा करने के लिए यह समझ में आता है क्योंकि रीडायरेक्ट को आमतौर पर निष्पादित करने के लिए कोई और तर्क की आवश्यकता नहीं होती है - बस इसके साथ प्रतिक्रिया एक 302 और नया पता जाने के लिए।

+1

ग्रेट स्पष्टीकरण! मुझे कहना है, हालांकि, मेरे प्रोग्रामिंग 101 शिक्षक मुझे असफल कर देते थे अगर मैं इस तकनीक को "तकनीक" का उपयोग करता। अपवाद बुरी चीज़ों को ध्वजांकित करने के लिए होता है, न कि "ड्रॉप" यह सब और कमरे छोड़ दो "। बुरा माइक्रोसॉफ्ट। – cockypup

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