2012-02-15 4 views
6

मैं एएसपी.नेट एमवीसी 3 का उपयोग कर रहा हूं और मेरे पास एक सी # ऑब्जेक्ट है जिसे मुझे अनुरोधों के बीच बनाए रखने की आवश्यकता है। यह कुछ सर्वर-साइड राज्य की जानकारी को बनाए रखता है जो इस प्रश्न के लिए वास्तव में महत्वपूर्ण नहीं है। वर्तमान में इस ऑब्जेक्ट को सत्र में क्रमबद्ध किया गया है और फिर प्रत्येक अनुरोध पर खींच लिया गया है।एमवीसी 3 में राज्य दृढ़ता के लिए एक वस्तु को देखने के लिए सबसे अच्छा तरीका है?

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

तो जाहिर है कि मुझे इस ऑब्जेक्ट को पृष्ठ पर स्टोर करने और अनुरोधों के साथ वापस पास करने की आवश्यकता है। मैं सोच रहा हूं कि इसके बारे में जाने का सबसे अच्छा तरीका क्या है। क्लाइंट को इस ऑब्जेक्ट में जानकारी की आवश्यकता नहीं है और इस ऑब्जेक्ट में डेटा संवेदनशील डेटा नहीं है, इसलिए मैं इसे आगंतुकों द्वारा देखने से रोकने की कोशिश नहीं कर रहा हूं। मैं बस सोच रहा हूं कि इस ऑब्जेक्ट को अनुरोध के बीच स्टोर करने का सबसे अच्छा तरीका क्या है। क्या एक सी # ऑब्जेक्ट को एक दृश्य में क्रमबद्ध करने का एक आसान तरीका है, एक छिपे हुए फ़ील्ड (वेब ​​फॉर्म व्यूस्टेट के समान) में कहें और फिर प्रत्येक अनुरोध पर इसे वापस ले जाएं?

+0

क्या कोई कारण है कि आप 'Html.Hidden' या' Html.HiddenFor' का उपयोग नहीं करेंगे? –

+0

क्योंकि मुझे सी # ऑब्जेक्ट को क्रमबद्ध करने की आवश्यकता है। यदि मैंने इसे एक छिपे हुए क्षेत्र के साथ किया है तो मुझे ऑब्जेक्ट की प्रत्येक प्रॉपर्टी के लिए एक छुपा फ़ील्ड रखना होगा, ऑब्जेक्ट को केवल व्यूस्टेट स्टाइल स्टोरेज में लंपाने और अगले अनुरोध पर इसे क्रमबद्ध करने के बजाय। – Chev

+0

ओह्ह्ह्ह, मुझे याद आया। उसमें सार्थकता कहीं ज़्यादा है। क्षमा करें :) –

उत्तर

3

आप एचटीएमएल का उपयोग कर सकते हैं। फ्यूचर्स प्रोजेक्ट से क्रमबद्ध करें। आप इसे इंस्टॉल-पैकेज एमवीसी 3 फ्यूचर्स

+1

यह वास्तव में एक ठोस समाधान की तरह लगता है। मैं इसे आज़माउंगा और रिपोर्ट करूंगा। धन्यवाद! – Chev

+0

मुझे बताएं, एलेक्स। मैं शायद इसके लिए भी उपयोग करूँगा। –

+1

यह बहुत अच्छा काम किया। खेद है कि इसे अपडेट करने में इतना समय लगा। यह उपयोग करने के लिए बहुत आसान है। अत्यधिक सिफारिशित। इसके अलावा, यह वायदा प्रोजेक्ट की बजाय एमवीसी का हिस्सा होना चाहिए। यह जादूगर बनाने जैसी चीजों के लिए बेहद उपयोगी है, आदि – Chev

1

द्वारा प्राप्त कर सकते हैं मैंने सी # में फेसबुक बिगपाइप का एक संस्करण लागू किया और मैंने अनुरोधों के बीच प्रत्येक व्यक्तिगत ऑब्जेक्ट को संग्रहीत करने के लिए HttpContextBase आइटम संग्रह का उपयोग किया।

var someCollection = (List<T>)ViewContext.HttpContext.Items["SomeCollection"];  
1

तो, एक और समाधान - एक समाधान यद्यपि - सत्र राज्य का हिस्सा के रूप में एक कुंजी-मान पेयर के भीतर वस्तु की दुकान, और एक छिपी हुई फ़ील्ड के रूप में कुंजी संग्रहीत करने में किया जाएगा।

  1. thingToStore = new KeyValuePair<string, YourType>("key1", yourObject)
  2. सत्र स्थिति में जोड़ें।
  3. उपयोगकर्ता के फॉर्म में कुंजी छुपाएं।
  4. पोस्ट-बैक/एक्शन इनवोकेशन
  5. कुंजी के माध्यम से ऑब्जेक्ट पुनर्प्राप्त करें पर पुनर्प्राप्त करें।

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

यह वैसे भी करने का एक तरीका है, वैसे भी।

+0

यह वास्तव में त्वरित सुधार के लिए वास्तव में एक स्मार्ट विचार है। – Chev

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