2012-02-13 9 views
17

im भ्रम है जिसके साथ एक पृष्ठ (पहले पृष्ठ) और फोन करने वाले पेज (नया पृष्ठ) बुला के अनुरोध के लिए बेहतर या प्रभाव है ...सर्वर। ट्रांसफर() बनाम। Server.Execute()

होने मैं देखा कि दोनों ही मामलों में, यूआरएल ब्राउजर में पहला पेज यूआरएल रहता है (नए पेज यूआरएल पर रीफ्रेश नहीं होता है) क्योंकि ब्राउजर से ऐसा करने का अनुरोध नहीं किया जाता है।

सराहनीय कोई टिप्पणी ....

+0

http://stackoverflow.com/questions/521527/response-redirect-vs-server-transfer –

+0

@Thit - कुछ और – StuartLC

+0

@ThitLwinOo, वह 'Server.Transfer बनाम Server.Execute' के बारे में पूछता है Response.Redirect है , 'Response.Redirect बनाम सर्वर। ट्रांसफर' के बारे में नहीं। –

उत्तर

20

Orignal पर: Difference between Server.Transfer and Server.Execute

दोनों Server.Transfer और Server.Execute क्लासिक एएसपी 3.0 में पेश किए गए (और अभी भी ASP.NET में काम करते हैं)।

जब सर्वर। निष्पादन का उपयोग किया जाता है, तो एक पैरामीटर को पैरामीटर के रूप में पास किया जाता है, और नियंत्रण इस नए पृष्ठ पर जाता है। कोड का निष्पादन नए पेज पर होता है। एक बार कोड निष्पादन खत्म होने के बाद, नियंत्रण प्रारंभिक पृष्ठ पर लौटाता है, बस इसे कहां रखा जाता है। हालांकि, सर्वर के मामले में। ट्रांसफर, यह बहुत ही काम करता है, निष्पादन निष्पादन नए पृष्ठ पर ही बंद हो जाता है (इसका मतलब है कि नियंत्रण कॉलिंग पेज पर वापस नहीं आ गया है)।

दोनों मामलों में, ब्राउज़र में यूआरएल पहला पृष्ठ यूआरएल रहता है (नए पेज यूआरएल को रीफ्रेश नहीं करता है) क्योंकि ब्राउजर को ऐसा करने का अनुरोध नहीं किया जाता है।

2

मुझे पता है कि यह पुराना है लेकिन जब मैंने Google पर खोज की थी तो यह पहली या दूसरी हिट के रूप में आया था। मैंने कुछ परीक्षण किया और परिणाम पोस्ट करना चाहता था।

मैंने 2 पृष्ठों के साथ एक वेबसाइट बनाई है। 1 पृष्ठ पर पृष्ठ लोड कोड ..

try { 
    //Response.Redirect("~/WebForm2.aspx"); 
    //Server.Transfer("~/WebForm2.aspx"); 
    //Server.Execute("~/WebForm2.aspx"); 
    //Server.TransferRequest("~/WebForm2.aspx"); 

    string strTry = "Try"; 
} catch (Exception) { 
    string strCatch = "Catch"; 
} finally { 
    string strFinally = "Finally"; 
} 

क्या यह प्रत्येक के लिए किया जो वास्तव में दिलचस्प था है के अनुक्रम ...

 
Command   Sequence    
Redirect   Call, Catch (ThreadAbortException), Finally, Load Page 2 
Transfer   Call, Load Page 2, Catch (ThreadAbortException), Finally 
Execute   Call, Load Page 2, Try (continues), Finally 
TransferRequest Call, Try (continues), Finally, Load Page 2 

.. निहित तो यह पता है कि मदद मिल सकती है ऑर्डर करें कि आपको चीजें घटित हों।

व्यक्तिगत रूप से मुझे अगले कोड के कोड शुरू होने से पहले वर्तमान कोड परिष्करण का विचार पसंद है। तो या तो रीडायरेक्ट या ट्रांसफर रिक्वेस्ट, हालांकि बाद वाले के साथ, आपको अपने कॉल के ठीक नीचे "वापसी" जोड़नी पड़ सकती है यदि आप वास्तव में इसके बाकी प्रयास ब्लॉक को निष्पादित नहीं करना चाहते हैं।

2

मैं इस आप

मदद मिल सकती है Server.Transfer

Server.Transfer एक पृष्ठ पर एक पृष्ठ से नियंत्रण हस्तांतरण करने के लिए प्रयोग किया जाता है लगता है। किसी अन्य पृष्ठ पर कोड निष्पादित करें लेकिन नियंत्रण पिछले पृष्ठ पर वापस नहीं लौटाता है। इस मामले में यूआरएल ब्राउज़र में नहीं बदलता है। यह एप्लिकेशन के बाहरी पृष्ठों पर नेविगेट नहीं कर सकता है। सिंटेक्स: सर्वर। ट्रांसफर ("किसी अन्य पृष्ठ का यूआरएल"); यह नए पृष्ठ पर पिछले पृष्ठ नियंत्रण तक पहुंच सकता है। पिछला पृष्ठ। FindControl() नए पृष्ठ पर उपलब्ध है। यह अतिरिक्त राउंड-ट्रिप से बचकर सर्वर संसाधनों को संरक्षित करता है।

Server.Execute

Server.Execute एक अन्य पेज से दूसरे पेज पर नियंत्रण हस्तांतरण करने के लिए प्रयोग किया जाता है। किसी अन्य पृष्ठ पर कोड निष्पादित करें और पिछले पृष्ठ पर वापस लौटें। इस मामले में यूआरएल ब्राउज़र में नहीं बदलता है। यह एप्लिकेशन के बाहरी पृष्ठों पर नेविगेट नहीं कर सकता है। सिंटेक्स: सर्वर। निष्पादन ("किसी अन्य पृष्ठ का URL"); यह नए पृष्ठ पर पिछले पृष्ठ नियंत्रण तक पहुंच सकता है। पिछला पृष्ठ। FindControl() नए पृष्ठ पर उपलब्ध है। यह अतिरिक्त राउंड-ट्रिप से बचकर सर्वर संसाधनों को संरक्षित करता है।

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