2009-08-20 11 views
6

मैं वेब & एएसपी.Net विकास पर अपेक्षाकृत नया हूं, इसलिए मेरे साथ भालू। हमारे वेब पृष्ठों का परीक्षण करने के दौरान, मैंने देखा कि यदि कोई उपयोगकर्ता "रीफ्रेश/रीलोड" पर क्लिक करना चाहता था, और "जानकारी पुनः भेजें" संवाद बॉक्स पर संकेत मिलने पर "पुनः प्रयास करें" पर क्लिक करता है, तो उपयोगकर्ता द्वारा चुने जाने से पहले जो भी अंतिम ईवेंट निकाल दिया गया था "रीफ्रेश" करने के लिए, बाद में फिर से निकाल दिया जाएगा।
उदाहरण के तौर पर हमारे पास "पिछला" और "अगला" एनवी बटन है जो उपयोगकर्ता को प्रश्नों की एक श्रृंखला के माध्यम से नेविगेट करने की अनुमति देता है। ऑपरेटर को "रीफ्रेश/रीलोड" मारा जाना चाहिए, जो कभी भी दबाए गए यूवी बटन को फिर से आग लग जाएगा। यह वास्तव में कुछ समझ में आता है, लेकिन शुद्ध प्रभाव उपयोगकर्ता को अगले या पिछले पृष्ठ पर समाप्त होता है, जिससे वह पहले देख रहा था। क्या इस तरह की चीज के लिए कोई काम है?ASP.net के साथ साइड इफेक्ट रीफ्रेशिंग/रीलोडिंग?

+0

देखें: http://stackoverflow.com/questions/743580/page-refresh-causes-duplicate-post-in-asp-net- एप्प्लिकेशंस – Shog9

उत्तर

4

यह PostBacks को संभालने के तरीके के कारण है।

एक छोटी सी पृष्ठभूमि के लिए आवश्यक है:

वेब "स्टेटलेस" है, जो एक सर्वर के लिए एक ग्राहक से प्रत्येक अनुरोध का मतलब यह पहले अनुरोध या उसके बाद अनुरोध से स्वतंत्र है। कोई "राज्य" बनाए रखा नहीं है। यदि आप HTTP स्तर को देखते हैं, तो यह केवल सर्वर पर भेजा गया एक टेक्स्ट ब्लॉब है जो कहता है "मुझे यह जानकारी भेजें" और सर्वर इसे वापस भेजता है। वहां कोई नहीं है "मैं वही उपयोगकर्ता हूं जो यहां 3 मिनट पहले था और मैं उस समय से अगले पृष्ठ पर जाना चाहता हूं, जिस पर मैंने पिछली बार बात की थी"।

जिस तरह से एएसपी.NET हल करता है यह समस्या व्यूस्टेट और पोस्टबैक का उपयोग कर रही है। प्रत्येक बार जब आप एएसपी.NET बटन पर क्लिक करते हैं, तो यह वास्तव में एक फॉर्म सबमिट कर रहा है जिसमें एन्कोडेड डेटा के समूह के साथ एक छिपी हुई फ़ील्ड है। उस डेटा में सभी जानकारी है जो सर्वर को पृष्ठ की स्थिति को "पुनर्निर्माण" करने की आवश्यकता है क्योंकि यह आखिरी बार था। फिर यह "अगले पृष्ठ पर जाएं" निष्पादित कर सकता है और वह आदेश समझ में आता है। जब ASP.NET क्लाइंट को HTML वापस भेजता है, तो यह उस डेटा को नए डेटा के साथ अपडेट करता है, जो पृष्ठ के राज्य का प्रतिनिधित्व करता है, जैसा कि अभी है। और अगली बार जब आप किसी भी बटन पर क्लिक करेंगे, डेटा फिर से भेजा जाता है, पृष्ठ फिर से पुनर्निर्मित किया जाता है और चक्र दोहराता है।

जब उपयोगकर्ता "रीफ्रेश" हिट करता है तो ब्राउजर उनसे पूछता है कि क्या वे फ़ॉर्म को फिर से सबमिट करना चाहते हैं। वे पिछले समय के समान डेटा को पुनः सबमिट कर रहे हैं। आप के लिए

प्रभाव:

आप उपयोगकर्ता या क्या वे ASP.NET ViewState की स्वतंत्र रूप से कर रहे हैं के बारे में कोई डेटा ट्रैक करने का प्रयास करते हैं, तो आप करने की आवश्यकता होगी सुनिश्चित करें कि आप सिंक्रनाइज़ हर बार पेज कि प्रक्रियाओं।

आप शायद ViewState में "वर्तमान पृष्ठ" रखना चाहते हैं:

ViewState.Add("CurrentPage", intCurrentPage); 

तो जब आप MoveNext ईवेंट हैंडलर फोन, क्या आप वाकई पृष्ठ के सापेक्ष आगे बढ़ रहे हैं के रूप में यह आखिरी बार था हो सकता है यह ग्राहक को भेजा गया था।

+0

बहुत धन्यवाद, बहुत उपयोगी। –

1

आप पोस्ट-रीडायरेक्ट-गेट पैटर्न की ओर देख सकते हैं जो आमतौर पर एएसपीनेट एमवीसी में उपयोग किया जाता है।

अधिक जानकारी के लिए here देखें।

+0

वास्तविक फॉर्म पुनर्वितरण को कम करने के लिए यह एक अच्छी तकनीक है, लेकिन मुझे यकीन नहीं है कि यह अत्यधिक अच्छा वेबफॉर्म ऐप में हर अनुरोध के लिए इसका उपयोग करना अच्छा विचार होगा। यह आवेदन-व्यापी अनुरोधों की संख्या दोगुनी है। –

+0

ओपी ने "अत्यधिक कट्टरपंथी" के बारे में कुछ भी नहीं बताया है, यह सिर्फ आपकी धारणा है और जब तक उसके पास प्रति सेकेंड 200 अनुरोध नहीं हैं, तो उनके बुनियादी ढांचे में अतिरिक्त दौर यात्रा शायद ही कभी दिखाई देगी। उन संवादों और पुनर्वितरण के खतरों से छुटकारा पाने के लिए यह अतिरिक्त काम के लायक है। – redsquare

+0

यदि आप देखते हैं कि SO एक ही तकनीक का उपयोग करता है। मुझे यहां कई पेफ मुद्दे नहीं दिख रहे हैं, और यह प्रति सेकंड कुछ बार से अधिक देखा जाता है! – redsquare