ट्रैकिंग राज्य ASP.NET AJAX / ICallbackEventHandler का उपयोग कर

वोट
9

मैं एक ASP.NET AJAX पेज में स्थिति को बनाए रखने के साथ एक समस्या है। लघु संस्करण: मैं पेज ViewState अद्यतन करने के लिए के बाद एक async कॉलबैक किया गया है, किसी भी राज्य async कॉल के दौरान किए गए सर्वर में परिवर्तन को प्रतिबिंबित करने के किसी तरह की जरूरत है।

यह एक आम समस्या है, लेकिन मैं समझने में सहायता मिलेगी मेरी परिदृश्य का वर्णन करेंगे:

अर्थात्, क्षमता खींचें और स्तंभों और पंक्तियों को छोड़ - मैं एक ग्रिड की तरह नियंत्रण जो कुछ जावास्क्रिप्ट संवर्द्धन है की है। जब एक स्तंभ या पंक्ति एक नई स्थिति में छोड़ा जाता है, एक AJAX विधि नियंत्रण सर्वर साइड को सूचित करें और ( OnColumnMoved या OnRowMoved) एक इसी सर्वर साइड ईवेंट सक्रिय करने का आह्वान किया है।

ASP.NET AJAX कहता है, डिफ़ॉल्ट रूप से, अनुरोध के रूप में पूरे पृष्ठ भेजें। इस तरह पेज एक पूरा जीवन चक्र के माध्यम से चला जाता है, viewstate एक समान होती है और इससे पहले कि RaiseCallbackEvent विधि शुरू हो जाती है नियंत्रण की स्थिति बहाल है।

हालांकि, बाद से AJAX कॉल पेज को अपडेट नहीं करता, ViewState को दर्शाता मूल नियंत्रण की स्थिति, के बाद भी स्तंभ या पंक्ति जाया गया है। तो दूसरी बार एक क्लाइंट-साइड कार्रवाई होती है, तो AJAX अनुरोध सर्वर को चला जाता है और पेज और नियंत्रण को प्रतिबिंबित करने के वापस ऊपर फिर से निर्माण कर रहे हैं पहले नियंत्रण की स्थिति, पहले स्तंभ या पंक्ति के बाद नहीं राज्य ले जाया गया था।

यह समस्या कई निहितार्थ फैली हुई है। उदाहरण के लिए हम ग्रिड के लिए एक नया आइटम जोड़ने के लिए एक क्लाइंट-साइड / AJAX कार्रवाई है, और फिर एक पंक्ति क्लाइंट-साइड पर एक से कम आइटम के साथ घसीटा जाता है, ग्रिड बनाया गया है सर्वर साइड है।

और अंत में और मेरी विशिष्ट उदाहरण के लिए सबसे अधिक गंभीरता से, वास्तविक डेटा स्रोत ऑब्जेक्ट हम पर कार्य कर रहे हैं पेज ViewState में संग्रहित है। यही कारण है कि चालाकी से डेटा है जो या तो कई जोड़तोड़ के बाद डीबी करने के लिए प्रतिबद्ध किया जा सकता है या खारिज कर दिया है, तो उपयोगकर्ता के पीठ के एक स्टेटफुल कॉपी बना अनुमति देने के लिए एक डिजाइन निर्णय था। यही कारण है कि बदलने के लिए बहुत मुश्किल है।

तो, फिर से, मैं के लिए पेज ViewState कॉलबैक की नई जानकारी के बाद AJAX विधि निकाल दिया जाता है एक तरह से की जरूरत है।

05/08/2008 को 14:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
1

आप पहले से ही वैसे भी चारों ओर ViewState फेरबदल कर रहे हैं, तो आप के रूप में अच्छी एक UpdatePanel का उपयोग हो सकता है। इसका आंशिक Postbacks होगा पृष्ठ की ViewState स्वचालित रूप से अपडेट।

07/08/2008 को 17:19
का स्रोत उपयोगकर्ता

वोट
1

: इस ब्लॉग पोस्ट देखें ICallbackEventHandler और Viewstate ट्वीक । लेखक बहुत स्थिति है कि आप अनुभव कर रहे संबोधित करते हुए किया जा रहा है:

तो जब ICallbackEventHandler का उपयोग कर आप कॉलबैक के लिए अद्यतन राज्य प्रबंधन के लिए दूर करने के लिए दो बाधाओं की है। पहले केवल पढ़ने के लिए viewstate की समस्या है। अन्य वास्तव में परिवर्तन कॉलबैक ट्रिगर से पहले उपयोगकर्ता पृष्ठ पर बना दिया है दर्ज की है।

यह कैसे हल करने के लिए पर अपने सुझाव के लिए ब्लॉग पोस्ट देखें। इसके अलावा इस की जाँच मंच पोस्ट जो साथ ही एक ही समस्या की चर्चा।

05/08/2008 को 15:25
का स्रोत उपयोगकर्ता

वोट
0

मुझे समझ नहीं आता क्यों तुम जब builtin ASP.NET AJAX UpdatePanel एक ही बात करता है कि के लिए एक कस्टम नियंत्रण, का प्रयोग करेंगे है।

यह सिर्फ अधिक जटिलता कहते हैं, आप कम समर्थन देता है, और इसे और अधिक मुश्किल दूसरों को अपने एप्लिकेशन पर काम करने के लिए बनाता है।

08/08/2008 को 05:56
का स्रोत उपयोगकर्ता

वोट
0

मैं के साथ एक काफी सुरुचिपूर्ण समाधान पाया Telerik के RadAjaxManager । यह काफी अच्छी तरह से, अनिवार्य रूप से आप प्रत्येक नियंत्रण जो एक पोस्टबैक आह्वान सकता है, और उसके बाद प्रत्येक नियंत्रण जो फिर से तैयार किया जाना चाहिए के बाद पोस्टबैक एसिंक्रोनस रूप से किया जाता है रजिस्टर रजिस्टर काम करता है। RadAjaxManager async पोस्टबैक के बाद डोम को अद्यतन करने और ViewState और सभी प्रभावित नियंत्रण को फिर से लिखने होंगे। परावर्तक में एक झलक लेने के बाद, यह हुड के नीचे एक छोटे से kludgy लग रहा है, लेकिन यह मेरी प्रयोजनों के सूट।

08/08/2008 को 05:18
का स्रोत उपयोगकर्ता

वोट
0

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

05/08/2008 को 15:54
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more