2010-03-25 20 views
5

में पोस्टबैक के बीच जटिल डेटा को जारी रखना मैं एक एएसपी.नेट एमवीसी 2 एप्लीकेशन विकसित कर रहा हूं जो डेटा पुनर्प्राप्ति और अद्यतन करने के लिए कुछ सेवाओं से जुड़ता है। सेवाओं को अद्यतन करते समय सेवाओं को अद्यतन इकाई के साथ मूल इकाई प्रदान करने की आवश्यकता होती है। ऐसा इसलिए है कि यह परिवर्तन ट्रैकिंग और आशावादी समेकन कर सकता है। सेवाओं को बदला नहीं जा सकता है।एएसपी.नेट एमवीसी

मेरी समस्या यह है कि मुझे किसी भी तरह पोस्टबैक के बीच मूल इकाई को स्टोर करने की आवश्यकता है। वेबफॉर्म में, मैंने व्यूस्टेट का उपयोग किया होगा, लेकिन जो मैंने पढ़ा है, वह एमवीसी के लिए बाहर है। मूल मूल्यों को छेड़छाड़ करने की ज़रूरत नहीं है क्योंकि सेवाएं उन्हें अविश्वसनीय मानती हैं। संस्थाएं (अधिकतम) 1k होगी और यह एक इंट्रानेट ऐप है।

विकल्प आए हैं कर रहे हैं:

  1. सत्र - की संभावना से इनकार - सत्र में इकाई स्टोर है, लेकिन मैं इस विचार पसंद नहीं है के रूप में वहाँ
  2. के बीच सत्र साझा करने के लिए कोई योजना नहीं हैं
  3. यूआरएल - की संभावना से इनकार - डेटा बहुत बड़ा है
  4. HiddenField - एक छिपी हुई फ़ील्ड में धारावाहिक इकाई स्टोर, शायद एन्क्रिप्शन/एन्कोडिंग के साथ
  5. छिपे हुए संस्करण - संस्थाओं के पास एक (एसक्यूएल) संस्करण फ़ील्ड है, जिसे मैं एक छिपे हुए क्षेत्र में डाल सकता हूं। फिर एक सहेजने पर मुझे सेवाओं से "मूल" इकाई मिलती है और संस्करणों की तुलना करके, अपनी आशावादी समरूपता प्राप्त होती है।
  6. कुकीज़ - 3 या 4, लेकिन एक कुकी के बजाय एक छिपी हुई फ़ील्ड

मैं विकल्प 4 की ओर झुकाव रहा हूँ का उपयोग कर की तरह, हालांकि 3 सरल होगा। क्या ये वैध विकल्प हैं या क्या मैं गलत ट्रैक पर जा रहा हूं? क्या ऐसा करने का कोई बेहतर तरीका है?

+0

टेम्पपडाटा को न भूलें http://stackoverflow.com/search?q=tempdata – R0MANARMY

+0

@ R0manarmy TempData केवल वर्तमान अनुरोध के लिए मान्य नहीं है? –

+0

स्पष्ट रूप से यह एएसपी.नेट एमवीसी 2 में बहुत बदल गया है http://blog.donnfelker.com/2010/02/26/aspnet-mvc2-tempdata-now-persists/ चॉइस काफी "हमने एमवीसी में कार्यान्वयन बदल दिया है परिणामस्वरूप थोड़ा सा: मूल्य को अनुरोध के बाद TempData से हटा दिया जाएगा, इसलिए यह आपके टेम्पपडेटा शब्दकोश में तब तक मौजूद रहेगा जब तक आप इसे किसी पृष्ठ में प्रदर्शित नहीं करते। यह एक बहु-रीडायरेक्ट परिदृश्य (जैसे कि विंडोज लाइव आईडी लॉगिन) TempData का उपयोग करने के लिए और जब तक आप इसके लिए तैयार नहीं हो जाते तब तक यह अभी भी लटक रहा है। " – R0MANARMY

उत्तर

1

यदि आप इसे सत्र में स्टोर करते हैं तो आपको यह सुनिश्चित करना होगा कि यदि आप वेब फार्म को लागू करते हैं तो सत्र सही ढंग से लोड हो जाता है।

हमारे पास फिलहाल एक ही प्रश्न है और हमने जो करने का निर्णय लिया है वह रिपोजिटरी पैटर्न को कार्यान्वित करना और कुकी से लिंक करना है।

फिर, यदि यह कोई मुद्दा बन जाता है, तो हम बस सत्र प्रबंधक, डीबी प्रबंधक या जो भी हो और हमारे कोड को रिपोजिटरी पैटर्न के कारण भी पता नहीं होना चाहिए।

हम छिपे हुए क्षेत्रों के विचार से चिंतित हैं लेकिन यह व्यूस्टेट की तरह बहुत अधिक महसूस किया गया है और हम सभी ने इसे वेबफॉर्म में नफरत की है ताकि विचार को तोड़ दिया जा सके। लेकिन सिर्फ इसलिए नहीं कि हम दृश्य राज्य से नफरत करते हैं। जब आप Ctrl F5 दबाते थे तो समस्याएं थीं। सामग्री को मंजूरी दे दी जाएगी और फिर आप क्या करेंगे?

तो इस बिंदु पर यह एक कुकी के साथ एक भंडार पैटर्न बदल सकता है, लेकिन कार्यान्वयन खुद को बदलने के लिए कृपया उधार देता है।

संपादित

हम भी छिपा क्षेत्रों के खिलाफ फैसला किया है क्योंकि यह उनके लिए परिवर्तन करने के लिए बहुत आसान होती है और इसलिए आप सर्वर से कुछ टोकन सामान करने के लिए सुनिश्चित करने के लिए यह के साथ छेड़छाड़ की wans't की जरूरत है।

छुपे हुए फ़ील्ड केवल जटिलता को जोड़ने पर रखे गए हैं जो अनिवार्य रूप से एक बहुत ही सरल समस्या होनी चाहिए थी।

कम से कम इस मामले पर हमारे विचार थे।

+0

आप भंडार में आइटम को किसी विशेष श्रृंखला पृष्ठ अनुरोधों को कैसे जोड़ रहे हैं? उदाहरण के लिए यदि किसी उपयोगकर्ता के पास एक ही पृष्ठ खुला है, तो एक दूसरे को बदलता है? स्मृति को बचाने के लिए सेट समय के बाद भी आइटम को साफ़ करते हैं? –

+0

ctrl-F5 कोई मुद्दा नहीं होगा क्योंकि डेटा केवल "पोस्टबैक" पर उपयोग किया जाता है, यानी जब सहेजें बटन क्लिक किया जाता है। –

+0

कभी भी ctrl + F5 को ध्यान में रखें, नियमित F5 पिछले फॉर्म को पुनः सबमिट कर सकता है। कुछ मामलों में ब्राउज़र में बैक बटन पर क्लिक करने से फॉर्म भी पुनः सबमिट हो सकता है। क्या इनमें से कोई भी मामला कोई मुद्दा है या क्या दिया गया इकाई केवल उसी मूल्य पर दो बार अपडेट किया जाएगा (दूसरा ऑपरेशन मूल रूप से नो-ऑप होता है)? – R0MANARMY

1

मुझे पूरा यकीन नहीं है कि सत्र एक बुरा विचार क्यों है, अगर क्लाइंट डोस को उस बैकअप प्रति की आवश्यकता नहीं है, तो पूरी चीज को सर्वर मेमोरी में रखना सबसे अच्छा लगता है; चूंकि शेष उम्मीदवार सभी क्लाइंट के ब्राउज़र में सर्वर (अस्थायी) भेजने के लिए भेज रहे हैं, और जब ग्राहक किसी भी कार्रवाई करता है तो उसे वापस प्राप्त करें। स्थिति यह है कि, जब भी क्लाइंट पिंग वापस आता है, सर्वर एन्कोड किए गए डेटा को अनपैक कर देगा (या तो छिपे हुए फ़ील्ड, कुकी, यूआरएल इत्यादि में) और संभवतः सर्वर में फिर से रखेगा! यह बैंडविड्थ आईएमओ भी बर्बाद करता है।

ठीक है, अगर ग्राहक को बैकअप का निरीक्षण करने की आवश्यकता है, तो मैं छिपे हुए फ़ील्ड (सेट) पर विचार करूंगा या बस एक्सएमएल में डेटा को क्रमबद्ध कर सकता हूं और इसे HTML में कहीं भी रख सकता हूं।

EDIT

मैं अभी भी सत्र के लिए वोट देता हूं।

http://msdn.microsoft.com/en-us/library/ms178587%28VS.80%29.aspx

और बस डेटाबेस में राज्य की दुकान: आप परवाह सर्वर फ़ार्म लेने के लिए योजना है, एक क्रॉस सर्वर सत्र प्रदाता को लागू करने पर विचार।

+0

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

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