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

मुझे एएसपी.NET AJAX पृष्ठ में राज्य को बनाए रखने में समस्या है। लघु संस्करण: एसिंक कॉलबैक के बाद किए गए सर्वर को किसी भी राज्य में परिवर्तन को प्रतिबिंबित करने के लिए, एसिंक कॉलबैक के बाद पेज व्यूस्टेट को अपडेट करने के लिए मुझे कुछ तरीका चाहिए।

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

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

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

However, since the AJAX call does not update the page, the ViewState reflects the original state of the control, even after the column or row has been moved. So the second time a client-side action occurs, the AJAX request goes to the server and the page & control are built back up again to reflect the first state of the control, not the state after the first column or row was moved.

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

And finally & most seriously for my specific example, the actual data source object we are acting upon is stored in the page ViewState. That was a design decision to allow keeping a stateful copy of the manipulated data which can either be committed to DB after many manipulations or discarded if the user backs out. That is very difficult to change.

इसलिए, फिर से, AJAX विधि को निकाल दिए जाने के बाद मुझे पृष्ठ दृश्य दृश्य को कॉलबैक पर अद्यतन करने के लिए एक तरीका चाहिए।

0
जोड़ा संपादित
विचारों: 1

5 उत्तर

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

0
जोड़ा

मैं Telerik के RadAjaxManager साथ

0
जोड़ा

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

0
जोड़ा

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

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

0
जोड़ा

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

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

इसे हल करने के तरीके पर उनके सुझावों के लिए ब्लॉग पोस्ट देखें। यह भी फ़ोरम पोस्ट देखें, जो एक ही समस्या पर चर्चा करता है।

0
जोड़ा