2012-08-31 25 views
5

मैं सामान्य ASP.NET नियंत्रण का एक समूह लेखन किया गया है, और एक बात मैं चारों ओर मेरे मन लपेटो नहीं कर पा रहे जब viewstate में मान संग्रहीत करने के लिए, और जब यह नहीं ठीक है ग्रहण करने के लिए है।मैं कैसे तय करूं कि व्यूस्टेट में स्टोर करना है?

एक तरफ, यह viewstate में नियंत्रण से पूरे राज्य स्टोर करने के लिए समझ में आता है, जैसे गुण शामिल हैं:

  • पाठ बॉक्स उपयोगकर्ता द्वारा दर्ज किए गए मान (या किसी भी रूप डेटा)
  • कॉन्फ़िगरेशन विकल्प जैसे ऊंचाई या पृष्ठ आकार
  • यहां तक ​​कि कैसे नियंत्रण बना दिया गया है - उदाहरण के सभी डेटा एक ग्रिड दृश्य से बनाया गया है, या ग्रिड में ही भंडारण के लिए।

की उपेक्षा कर प्रदर्शन, और अधिक, क्योंकि इसका अर्थ नियंत्रण बिल्कुल वैसा ही भर Postbacks व्यवहार करेंगे और कभी नहीं "गलती" एक मूल्य के वापस लौटने या "भूल" यह अक्षम किया गया था आप, viewstate में धक्का कर सकते हैं बेहतर है। लेकिन व्यूस्टेट मुफ्त नहीं है। सब कुछ संग्रहित करने का मतलब है कि नियंत्रण अब एचटीएमएल और उसके सभी आंतरिक गुणों को एचटीएमएल बनाने के लिए आउटपुट करेगा, जो लगभग हमेशा आउटपुट से दोगुना होगा।

मेरा प्रश्न प्रदर्शन के बारे में नहीं है, लेकिन रणनीति के बारे में। मैं किस संपत्ति पर व्यूस्टेट में संपत्ति लगाने का फैसला करता हूं? मैं इन पंक्तियों के साथ कुछ सोच रहा था:

उपयोगकर्ता एक संपत्ति नहीं बदल सकते हैं, तो सर्वर हमेशा यह स्पष्ट रूप से सेट हो जाएगा, तो यह यह viewstate से बाहर छोड़ने के लिए ठीक है। color=red जैसे कुछ के लिए, उपयोगकर्ता इस संपत्ति को सीधे सेट नहीं करता है; वे कहीं और बटन पर क्लिक करेंगे जो अप्रत्यक्ष रूप से इस संपत्ति को सेट करता है। उस बटन या उसके मालिक को राज्य को रखना चाहिए, नियंत्रण नहीं जो रंग लाल रंग प्रदान करता है।

इस तर्क का तात्पर्य है कि उन लक्षणों को viewstate में जाना चाहिए होगा:

  1. फार्म जैसे तत्वों <input> (और Request.Form[c.UniqueID] साथ यह अभी भी बचा जा सकता है)
  2. गुण है कि उपयोगकर्ता नियंत्रित कर सकते हैं सीधे नियंत्रण पर interactively।

इस तर्क मतलब है? यह कमजोर लगता है और मैं विशेषज्ञों से और अधिक सुनना चाहता हूं।

+1

इसके अलावा: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx एक मजेदार पढ़ा गया है – Patrick

उत्तर

4

उपयोग ViewState

उपयोग ControlState चीजें हैं जो आवश्यक हैं अपने नियंत्रण में काम करने के लिए भले ही ViewState अक्षम किया गया है के लिए।

प्रारंभिक मान और नियंत्रण पदानुक्रम (यहां तक ​​कि एचटीएमएल-नियंत्रण) पृष्ठ को पहले अनुरोध किए जाने पर अस्थायी एएसपी.NET फ़ाइलों में संकलित किया जाता है। इसलिए उन्हें कहीं भी संग्रहीत करने की आवश्यकता नहीं होती है जब वे कभी नहीं बदले जाते हैं (और यहां तक ​​कि व्यूस्टेट भी उन्हें सहेज नहीं पाएगा)।

एक नियंत्रण केवल ViewState में गुणों को संग्रहीत करता है जो पृष्ठ के जीवन चक्र के दौरान बदल गए हैं (TrackViewState के बाद से)। एक नियंत्रण जो राज्य बदल गया था वह "गंदे" है। उदाहरण के लिए यदि आप पेज_लोड में TextBox1.Text बदलते हैं, तो ViewState.IsItemDirty("TextBox1.Text") सत्य वापस आ जाएगा। ये मान ViewState में संग्रहीत किए जाएंगे।

here और here देखें। (मैं वास्तव में दोनों लेख पढ़ने के लिए सलाह देते हैं)

Control State vs. View State Example

0

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

3

MSDN पर इस लेख कब, कहाँ और क्या ASP.NET में उपलब्ध राज्य प्रबंधन विकल्प की अधिकता के उपयोग करने के लिए दृश्य राज्य अनुभाग के लिए नीचे दिए गए पोस्ट किया जाता है को कवर चेक सुविधा - फायदे और नुकसान के खिलाफ अपनी आवश्यकताओं की जाँच के मामले के आधार द्वारा एक मामले पर उपयोग पर आपका मार्गदर्शन चाहिए:

पूरे यहाँ लेख: http://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx

Viewstate अंश:

देखें राज्य

वेब प्रपत्र पृष्ठ स्वचालित रूप से एक ही पृष्ठ के लिए एकाधिक अनुरोध के बीच मूल्यों को बनाए रखना के लिए निर्मित एक संरचना रूप ViewState संपत्ति प्रदान करते हैं। देखें पृष्ठ को पृष्ठ में एक छिपे हुए क्षेत्र के रूप में बनाए रखा जाता है। अधिक जानकारी के लिए, एएसपी.नेट स्टेट मैनेजमेंट अवलोकन देखें।

पृष्ठ दृश्यों को वापस पोस्ट करते समय राउंड ट्रिप में अपने स्वयं के पेज-विशिष्ट मानों को स्टोर करने के लिए दृश्य स्थिति का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आपका एप्लिकेशन उपयोगकर्ता-विशिष्ट जानकारी को बनाए रखता है - यानी पृष्ठ में उपयोग की जाने वाली जानकारी है, लेकिन यह आवश्यक नहीं है कि किसी भी नियंत्रण का हिस्सा हो - आप इसे दृश्य स्थिति में संग्रहीत कर सकते हैं।

दृश्य राज्य का उपयोग करने के लाभ कर रहे हैं:

कोई सर्वर संसाधनों दृश्य राज्य के लिए आवश्यक हैं पृष्ठ कोड में एक संरचना में निहित है।

सरल कार्यान्वयन देखें राज्य को किसी भी कस्टम प्रोग्रामिंग का उपयोग करने की आवश्यकता नहीं है। यह नियंत्रणों पर राज्य डेटा को बनाए रखने के लिए डिफ़ॉल्ट रूप से चालू है।

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

दृश्य राज्य का उपयोग का नुकसान कर रहे हैं:

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

डिवाइस सीमाएं मोबाइल डिवाइस में बड़ी संख्या में दृश्य-डेटा डेटा स्टोर करने के लिए स्मृति क्षमता नहीं हो सकती है।

संभावित सुरक्षा जोखिम दृश्य स्थिति पृष्ठ पर छिपा फ़ील्ड एक या अधिक में संग्रहीत है। यद्यपि स्टेटस डेटा को हैश प्रारूप में डेटा स्टोर करता है, फिर भी इसे छेड़छाड़ की जा सकती है। छुपा फ़ील्ड में जानकारी देखी जा सकती है यदि पृष्ठ आउटपुट स्रोत सीधे देखा जाता है, संभावित सुरक्षा समस्या बना रहा है। अधिक जानकारी के लिए, वेब अनुप्रयोगों के लिए ASP.NET वेब एप्लिकेशन सुरक्षा और मूल सुरक्षा व्यवहार देखें।