2012-10-11 15 views
5

में डेटाटेबल को संग्रहीत करना मैं माइक्रोसॉफ्ट से राज्य प्रबंधन के बारे में इस लेख को पढ़ रहा था।व्यूस्टेट

http://msdn.microsoft.com/en-us/library/75x4ha6s(v=vs.100).aspx

मैं यहाँ एक दिलचस्प बात पाया। व्यूस्टेट को क्लाइंट साइड विकल्प के रूप में वर्गीकृत किया गया है (हालांकि मुझे पहले से ही यह पता था)। यह मुझे आवेदन में हमारे कोड की याद दिलाता है।

DataTable dt = getDatatableFromDB(); 
ViewState["dataTable"] = dt; 

और यह कोड इस समय ठीक काम कर रहा है।

मेरे भ्रम की स्थिति है:

  1. एक ग्राहक के पक्ष वस्तु (ViewState) कैसे बचा सकता है सर्वर साइड वस्तु (DataTable)?
  2. क्या डेटाटेबल्स जैसी बड़ी वस्तुओं को संग्रहीत करने के लिए व्यूस्टेट का उपयोग करना एक अच्छा अभ्यास है?
  3. यदि हम इस दृष्टिकोण का उपयोग करते रहें तो क्या संभवतः साइड इफेक्ट (यदि कोई हो) हो सकता है?
+5

डाउनवॉटर - यदि आप टिप्पणियां नहीं छोड़ते हैं, तो ओपी कभी भी बेहतर प्रश्न पूछने के बारे में नहीं सीख पाएगा। व्यक्तिगत रूप से, मुझे इस प्रश्न के साथ कोई समस्या नहीं है। मेरा मानना ​​है कि यह समुदाय के लिए उपयोगी है, इसलिए मैं चीज़ों को संतुलित करने के लिए एक +1 जोड़ रहा हूं। – JDB

+1

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

+0

धन्यवाद, लेकिन वास्तव में एक मानक है जिसके द्वारा अच्छे/बुरे प्रश्नों का न्याय करना है - जिसका मतलब है कि स्टैक ओवरफ्लो पर सभी प्रश्नों का स्वागत नहीं है (http://stackoverflow.com/questions/how-to-ask देखें)। मुझे बस आपके साथ कोई समस्या नहीं दिख रही है। – JDB

उत्तर

8

व्यूस्टेट फॉर्म पर छिपे हुए <input /> टैग में संग्रहीत है। जब उपयोगकर्ता पोस्टबैक शुरू करता है (उदाहरण के लिए, बटन पर क्लिक करके), डेटा को डेटा डेटा के हिस्से के रूप में सर्वर पर वापस कर दिया जाता है।

यदि आप व्यूस्टेट में बड़ी मात्रा में डेटा स्टोर करते हैं, तो जब उपयोगकर्ता पृष्ठ डाउनलोड करने का प्रयास करता है तो आप दोनों को दंड लगेंगे (क्योंकि वह डेटा HTML का हिस्सा होगा) और जब उपयोगकर्ता फॉर्म सबमिट करने का प्रयास करता है (क्योंकि वह डेटा सर्वर पर वापस अपलोड किया जाना चाहिए)।

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

मैं आपके previous question से देखता हूं कि आप अपने डेटाटेबल्स को रखने के लिए एक अच्छी जगह ढूंढने की कोशिश कर रहे हैं। जब तक डेटा अपेक्षाकृत छोटा होता है तब तक व्यूस्टेट सबसे खराब स्थान नहीं होता है। मेमोरी उपयोग के मामले में बेस 64 एक्सएमएल से बेहतर है लेकिन यह अभी भी कुशल से लंबा रास्ता है। यदि डेटा काफी स्थिर है, तो आप इसे ApplicationState में संग्रहीत करने पर विचार करना चाहेंगे। यदि आप ग्रिड व्यू के साथ डेटाटेबल को संपादित कर रहे हैं, तो ग्रिड व्यू वास्तव में आपके लिए डेटाटेबल को संग्रहीत कर रहा है जिसे आप DataSource संपत्ति के माध्यम से एक्सेस कर सकते हैं (बस इसे डेटाटेबल पर वापस डालें)।


यह भी ध्यान देने योग्य बात यह है कि जब ViewState डेटा बेस 64 में एन्कोड किया गया है (जिसका अर्थ है औसत उपयोगकर्ता यह समझने में सक्षम नहीं होगा), यह आसानी से एक निर्धारित उपयोगकर्ता द्वारा संपादित किया जा सकता है लायक है। आपकी वेबसाइट के लिए काफी हानिकारक बनने के लिए स्पष्ट रूप से निर्दोष डेटा संपादित किया जा सकता है। यह एक वेबसाइट हैकिंग के लिए एक क्लासिक एवेन्यू है, इसलिए आपको डेटा के बारे में बहुत सावधान रहना चाहिए, ठीक है, आप स्टोर कर रहे हैं। उदाहरण के लिए, यदि आप व्यूस्टेट में उपयोगकर्ता की आईडी संग्रहीत करते हैं, तो उपयोगकर्ता आईडी को संपादित कर सकता है और दूसरे उपयोगकर्ता के खाते में हैक कर सकता है। (नोटः यह केवल एक मुद्दा है, तो EnableViewStateMac False करने के लिए सेट किया गया है।)

+1

साइड नोट: यह इनपुट मूल्य में क्रमबद्ध है और इसके रास्ते पर deserialized है। –

+0

@ Cyborgx37, ViewViewStateMAC को ViewState संपादित करने के मामले में मदद करेगा? –

+1

हां, 'EnableViewStateMac' व्यूस्टेट हैकिंग को रोकने की दिशा में एक लंबा सफर तय करेगा। – JDB

4

1) कैसे एक ग्राहक के पक्ष वस्तु (ViewState) को बचा सकता है सर्वर साइड वस्तु (DataTable)?

यह क्रमबद्ध है।

2) क्या डेटाटेबल्स जैसी बड़ी वस्तुओं को संग्रहीत करने के लिए व्यूस्टेट का उपयोग करना एक अच्छा अभ्यास है?

यह आपके पर्यावरण और आवश्यकताओं पर निर्भर करता है।

3) यदि हम इस दृष्टिकोण का उपयोग करते रहें तो क्या संभवतः साइड इफेक्ट (यदि कोई हो) हो सकता है?

तार पर बहुत सारे डेटा चलेंगे। यह चीजों को धीमा कर सकता है।

+3

एक और पक्ष नोट: एक बड़ी वस्तु को क्रमबद्ध करने से यह धीमा हो जाएगा .. न केवल वायर ट्रांसफर। –

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