2008-09-24 14 views
5

हम एक खोज अनुप्रयोग लिख रहे हैं जो सत्र स्थिति में खोज मानदंडों को बचाता है और एएसपीनेट अपडेट पैनेल के अंदर खोज निष्पादित करता है। कभी-कभी जब हम लगातार दूसरी खोजों को निष्पादित करते हैं तो दूसरी या तीसरी खोज कभी-कभी खोज मानदंडों के पहले सेट से परिणाम लौटाएगी।एएसपी.नेट अजाक्स - असिंच अनुरोध में अलग सत्र है?

उदाहरण: हमारी पहली खोज हम "जॉन स्मिथ" पर दिखते हैं -> जॉन स्मिथ के परिणाम प्रदर्शित होते हैं। दूसरी खोज हम "बॉब जोन्स" पर नजर रखते हैं -> जॉन स्मिथ के परिणाम प्रदर्शित होते हैं।

हमने सत्र राज्य में सभी खोज मानदंडों को सहेज लिया जैसा मैंने कहा था, और डीबी क्वेरी को प्रारूपित करने के लिए AJAX अनुरोध के अंदर सत्र स्थिति से इसे पढ़ा। जब हम वीएस में ब्रेक पॉइंट डालते हैं तो सब कुछ सामान्य के रूप में व्यवहार करता है, लेकिन उनके बिना हमें मूल खोज मानदंड और परिणाम मिलते हैं।

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

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

उत्तर

4

वहाँ नहीं कर रहे हैं सामान्य एएसपी.नेट पेज लोड, पोस्टबैक, और एएसपी.नेट AJAX आंशिक पोस्टबैक के बीच कई सत्र। मैं आपको निश्चित रूप से बता सकता हूं।

सत्र में खोज स्ट्रिंग को संग्रहीत करने के बजाय, केवल टेक्स्टबॉक्स की सामग्री को सीधे खोजने के बारे में कैसे? मैं किसी भी कारण से नहीं सोच सकता कि आपको इसे चारों ओर घुमाने की आवश्यकता क्यों है, क्योंकि यह पूरे पृष्ठ जीवन चक्र में उपलब्ध होगा।

अंत में, अपनी आवश्यकताओं के विषय में ... एक UpdatePanel का उपयोग नहीं आवश्यकता है कि अपने उपयोगकर्ताओं पृष्ठ पर अन्य कार्यक्षमता का उपयोग करने में सक्षम है, तो यह है कि कार्यक्षमता भी आंशिक Postbacks को जन्म देती है किया जाना चाहिए पूरा करता है। एक समय में केवल एक आंशिक पोस्टबैक प्रगति पर हो सकता है। यदि आपकी खोज प्रगति पर है, तो एक और घटना उठाई जाती है, तो बिना किसी अधिसूचना के खोज अनुरोध रद्द कर दिया जाएगा।

खोज के लिए पृष्ठ विधि या वेब सेवा का उपयोग करना अधिक तेज, आसान और इसे करने का अधिक मजबूत तरीका होगा। मैं आमतौर पर अपनी साइट को प्लग नहीं करता हूं, लेकिन मुझे लगता है कि मेरी कुछ पोस्ट्स आप जो कर रहे हैं उसके लिए बिल्कुल प्रासंगिक हैं:

आप वेब सेवा के माध्यम से खोज परिणामों को प्रस्तुत करने के लिए उपयोगकर्ता नियंत्रण का उपयोग कर सकते हैं (बहुत अधिक तेजी से एक UpdatePanel से): http://encosia.com/2008/02/05/boost-aspnet-performance-with-deferred-content-loading/

या, आप JSON के रूप में खोज परिणाम सकता है और प्रस्तुत करना है कि ग्राहक की ओर (भी तेजी से): http://encosia.com/2008/06/26/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/

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

4

आपको जिस फ़ंक्शन को आप कॉल कर रहे हैं उसके लिए WebMethod विशेषता की EnableSession प्रॉपर्टी सेट करने की आवश्यकता है।

[WebMethod(EnableSession=true)] 
public static void DoSomething(){ 
    /// .... 
} 
+0

से निकाले जाते हैं यह एक वेब सेवा नहीं है। –

+0

एक आकर्षण की तरह काम किया !!! वीबीएनईटी में: wayofthefuture

5

बस एक और सोचा, मैं हमेशा UpdatePanel के साथ समस्याओं में चलाने के लिए और पुस्तकालय के माध्यम से अपने एटलस ajax अनुरोध सीधे लिखने के लिए, PageMethods का उपयोग करना पसंद है। आप जो भेजते हैं और प्राप्त करते हैं उस पर आपका अधिक नियंत्रण होता है। UpdatePanel पूरे पृष्ठ को भेजता है, और पूरे पृष्ठ नियंत्रण विरासत प्राप्त करता है, फिर यह 'ताजा' क्या है और इसे प्रदर्शित करता है।

संपादित करें: सत्र में मानदंडों को सहेजने के लिए आप किस कोड का उपयोग कर रहे हैं? और क्या आपके पास उस विधि में कोड है जो वास्तव में यह देखने के लिए जांच करता है कि सत्र में कुछ सहेजे गए मानदंड हैं, और इसके बदले में वापस आते हैं? शायद यही कारण है कि दूसरे/तीसरे अद्यतन पैनेलबैक अपेक्षित परिणामों के बजाय मानदंड के पहले सेट को वापस कर रहे हैं? एक तरफ, मुझे कुछ भारी एटलस एजेक्स चीजें करने से पता है कि निश्चित रूप से दो सत्र नहीं हैं (सामान्य पोस्टबैक के लिए एक, एसिंक के लिए एक) क्या कोई मौका है कि आप वेबफर्म का उपयोग कर रहे हैं?

संपादित # 2: मैं लिखने के लिए क्या मैं (प्रथम पैरा) के ऊपर लिखा है में सक्षम नहीं किया गया है अगर मैं के साथ-साथ उत्तर दिया किसी के एक प्रशंसक नहीं था: https://stackoverflow.com/users/60/dave-ward

+0

हां हम मानदंडों को सहेज रहे हैं और परिणामों को उसी अद्यतन पैनल में वापस कर रहे हैं। कोई वेबमाइड नहीं हम मानदंडों को सहेजते हैं क्योंकि किसी अन्य उपयोगकर्ता नियंत्रण (परिणाम) से मानदंड उपयोगकर्ता नियंत्रण को कॉल नहीं करना चाहिए, सबकुछ बचाया जाना चाहिए और नियंत्रक से पुनर्प्राप्त किया जाना चाहिए। –

+1

डेव वार्ड ने पिछले साल कम से कम आधा दर्जन बार छुपाया था जब मैं दोनों एएसपीनेट AJAX और jQuery का उपयोग करने वाली परियोजना में गहरी घुटने टेक रहा था। –

0

आप .ashx सामान्य संचालकों का उपयोग करते हैं, बस IRequiresSessionState इंटरफ़ेस

public class ActionRequest : IHttpHandler, IRequiresSessionState 
{ 
} 
संबंधित मुद्दे