2010-03-12 13 views
5

मैं Asp.net 2.0 का उपयोग कर रहा हूं। मैं पेज 1 से पेज 2 पर server.transfer करता हूं। यूआरएल पेज 1 बना रहता है। अब मैं पेज 2 पर एक लिंक पर क्लिक करता हूं और यह मुझे पेज 3 पर स्थानांतरित कर देगा। इसलिए यूआरएल पेज 1 रहना चाहिए। इसके बजाय ब्राउजर अब यूआरएल दिखाता है पृष्ठ 2. क्या यह अपेक्षित व्यवहार है?सर्वर। ट्रांसफर URL को दूसरी बार बदल रहा है

मैं वास्तव में यूआरएल से पैरामीटर छिपाने की कोशिश कर रहा था।

  1. मैं response.redirect का उपयोग नहीं कर सकता क्योंकि मैं यहां से पिछले पृष्ठ तक नहीं पहुंच सकता।
  2. मैंने PostBackUrl का उपयोग करने का प्रयास किया, लेकिन यह मेरे लिए काम नहीं करेगा क्योंकि मुझे वर्तमान पृष्ठ पर डेटा को सहेजने की आवश्यकता है और फिर कोई त्रुटि नहीं होने पर अगला पृष्ठ दिखाएं। यदि डेटा गलत था, और/या त्रुटियां थीं, तो मुझे उपयोगकर्ता को एक ही पृष्ठ दिखाना होगा।
  3. अब मैंने सर्वर का प्रयास करने का विचार किया। ट्रांसफर, लेकिन यह पिछले पृष्ठ का यूआरएल दिखा रहा है।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

+0

मैं सत्रों का उपयोग करके समाप्त हुआ और यह मेरे लिए समस्या हल करता है। लेकिन मैं अभी भी जानना चाहूंगा कि इस समस्या का समाधान क्या है। –

उत्तर

1

यह व्यवहार की उम्मीद है।

जब आप Server.Transfer का उपयोग करते हैं तो एएसपी.नेट ThreadAbortException के माध्यम से मूल अनुरोध को संसाधित करना बंद कर देता है और फिर तत्काल, उसी धागे में, नए अनुरोध को संसाधित करना शुरू कर देता है। नया अनुरोध चलता है और ब्राउज़र में अपना आउटपुट भेजता है। ब्राउज़र को Server.Transfer के बारे में कुछ भी पता नहीं है। सभी ब्राउज़र जानता है कि उसने पृष्ठ 1 का अनुरोध किया है और सर्वर ने इसे कुछ सामग्री वापस भेज दी है, जो कि डेवलपर आपको वास्तव में पृष्ठ 2 से है।

पोस्टबैक वह जगह है जहां पृष्ठ 2 यूआरएल बाहर निकलता है, अगर इसे छुपाया जाना था। पेज 2 सामग्री को पोस्टबैक को संसाधित करने के लिए, इसे पेज 2 पर पोस्टबैक करना होगा। यदि यह पृष्ठ 1 पर वापस पोस्ट किया गया है, तो पेज 1 को पता नहीं होगा कि व्यूस्टेट और फॉर्म इवेंट्स के साथ क्या करना है क्योंकि वास्तव में वे पेज 2 द्वारा जेनरेट किए जाते हैं। इसे पूरा करने के लिए, पेज 2 द्वारा प्रदत्त <form> तत्व page2 का action है। Server.Transfer के बाद ब्राउज़र में अपने HTML स्रोत को देखो, तो आप इस देखेंगे:

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm"> 

पारंपरिक webforms का उपयोग करना, केवल असली तरीका पूरी तरह से उपयोगकर्ता से URL को छिपाने के लिए Postbacks का उपयोग नहीं करने के लिए हो सकता है और सभी के लिए होता है पेज 2 पर लिंक वास्तव में पृष्ठ 1 पर वापस लिंक करते हैं और इसे उचित रूप से संभालने के लिए पृष्ठ 1 पर सभी तर्क जोड़ें।

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

एएसपी.नेट एमवीसी का भी बेहतर उपयोग करना होगा जो आपको दोस्ताना आरईएसटी जैसी यूआरएल की ओर धकेलता है जो उपयोगकर्ता को समझने के लिए बहुत आसान है और आप आंतरिक रूप से अधिक जटिल पैरामीटर को मैप कर सकते हैं।

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