2012-03-19 11 views
6

मुझे एक पोस्ट एएसपी.NET एप्लिकेशन और पोस्ट बैक के बाद बैक बटन में परेशानी हो रही है।एएसपी.नेट ब्राउज़र बैक बटन के लिए "वेब पेज की समयसीमा समाप्त हो गई है" (पोस्ट बैक के बाद)

प्रश्न में पृष्ठ पर एक साधारण रूप है, कुछ टेक्स्ट फ़ील्ड इत्यादि हैं, और एक ड्रॉपडाउन जो पोस्टबैक (ऑटोपोस्टबैक) करता है।

उपयोगकर्ता "फ़ॉर्म" भरता है और शायद ड्रॉपडाउन बदलता है। ड्रॉपडाउन मान के आधार पर पृष्ठ सामग्री बदल सकती है।

मेरी समस्या यह है कि उपयोगकर्ता ने ड्रॉपडाउन बदल दिया है और पोस्टबैक पूरा हो जाने के बाद उपयोगकर्ता बैक बटन पर क्लिक करता है। वे आईई से "वेबपृष्ठ समाप्त हो गया" संदेश देखते हैं।

मैं निम्नलिखित निर्धारित किया है:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.Private); 

लेकिन उस समस्या को किसी न किसी के लिए नहीं लगता है। निजी, नहीं-कैश:

वास्तविक कैश-नियंत्रण प्रतिक्रिया हेडर के रूप में लिखा है "सेट-कुकी"

बस "निजी" वापस बटन के एक कैश-नियंत्रण प्रतिक्रिया हेडर के साथ एक क्लासिक एएसपी आवेदन में "पोस्ट बैक" के बाद अपेक्षित व्यवहार करता है।

क्या एएसपी.NET को कैश-कंट्रोल को स्पष्ट रूप से बिल्कुल "निजी" पर सेट करने के लिए मजबूर करना है? या कोई अन्य समाधान जिसके परिणामस्वरूप बैक बटन और पोस्टबैक एक साथ काम कर रहे हैं?

धन्यवाद!

उत्तर

1

आप जो कर रहे हैं वह वास्तव में एक पुरानी समस्या है। संक्षेप में, "वेब पेज समाप्त हो गया है" संदेश देखने का कारण यह है कि "बैक" बटन को अक्षम करने की तकनीकों में से एक को नियोजित किया गया है। तकनीक कैश को अतीत में किसी तारीख को सेट करती है, इसलिए ब्राउज़र को यह त्रुटि दिखाने के लिए कारण होता है यदि उपयोगकर्ता "बैक" बटन पर क्लिक करता है।

कि कोड की इस पंक्ति होगा:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 

इसका कारण यह है कि कैसे काम करता है पोस्टबैक की, एक मुद्दा रहा है विशेष रूप से WebForms ASP.NET के साथ, अन्य व्यवस्थाएं की तुलना में।

शामिल सभी मुद्दों की पूरी तरह से व्याख्या के लिए, मैं दृढ़ता से नीचे दिए गए लेख को पढ़ने की सलाह देता हूं। यह सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन मुझे लगता है कि आपको एक साधारण उत्तर से अधिक जानकारी मिल जाएगी और इस मुद्दे की बेहतर समझ के साथ सशस्त्र, आपके विकल्पों के माध्यम से आपको सोचने में मदद मिलेगी। भाग 1 और 2.

http://www.4guysfromrolla.com/webtech/111500-1.shtml पढ़ लें

मैं इतना है कि Postbacks एक के रूप में व्यवहार नहीं कर रहे हैं, कैसे "वापस" बटन को फिर से एक "वापस" बटन की तरह व्यवहार करने के बारे में एक विचार है पृष्ठ नेविगेशन:

व्यक्तिगत रूप से, मैं एक (यकीनन hackish/लापरवाह) सिर्फ एक UpdatePanel में बातें डाल जब मैं postbacl/वापस बटन संघर्ष नहीं करना चाहते हैं, के बाद से मैं अपने ऐप्स के अधिकांश में अजाक्स का उपयोग के दृष्टिकोण को अपनाया है वैसे भी। यह "पृष्ठ" बटन को वास्तव में उसी पृष्ठ पर स्टैंग करने के बजाए पिछले पृष्ठ पर वापस जाने के लिए मजबूर करता है, लेकिन नियंत्रण मानों पर वापस लौटने के बाद वे पोस्टबैक से पहले थे।

+0

यह मेरे लिए थोड़ा समझ में आता है कि एक क्लासिक एएसपी अनुप्रयोग है कि करने के लिए -1 मिनट की समाप्ति सेट कैश-नियंत्रण निजी वापस की सुविधा देता है "काम के रूप में" बटन काम करता है लेकिन समाप्ति के साथ एक एएसपी.NET एप्लिकेशन -1 मिनट तक सेट होता है और कैश-कंट्रोल सेट "निजी, नो-कैश: सेट कुकी" पर सेट नहीं होता है। यह मेरे लिए समस्या के रूप में "नो-कैश: सेट कुकी" को इंगित करता है। – user505765

+0

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

+0

शायद यह एक बेहतर स्पष्टीकरण है - ब्राउज़र में, प्रत्येक पोस्टबैक वास्तव में एक नया पृष्ठ विज़िट होता है, और यह इतिहास में संग्रहीत है, भले ही वेबफॉर्म प्रतिमान ने इसे ऐसा करने की कोशिश की जैसे डेवलपर के लिए यह तरीका नहीं है। – David

2

एक स्थिति पर निर्भर करता है कि आप इस हैक/वैकल्पिक हल के साथ भाग मिल सकता है:

private void Page_PreRender(object sender, System.EventArgs e) 
    { 
     if (IsPostBack && !IsCallback) 
     { 

      Response.Write("<html><head><script>location.replace('" + Request.Path + "');\n" + "</script></head><body></body></html>\n"); 

      Response.End(); 

     } 

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