2011-03-30 3 views
17

में `EnableViewState` और` ViewStateMode` से उलझन में। यह एक प्रदर्शन मुद्दा है - विशाल दृश्यमान नोटिस देरी देरी का कारण बनता है। लेकिन अधिकांश रूपों को वास्तव में कुछ जटिल नियंत्रण & फ़ॉर्म डेटा को छोड़कर व्यूस्टेट की आवश्यकता नहीं होती है। यहां तक ​​कि इनपुट इनपुट वाले फॉर्म भी बड़े व्यूस्टेट उत्पन्न करते हैं क्योंकि मुझे लगता है कि एएसपीनेट प्रत्येक सर्वर नियंत्रण के बारे में सभी प्रकार के मेटाडेटा को संग्रहीत कर रहा है। लेकिन दृश्यता स्थिति, आदि सभी को कोड में नियंत्रित किया जाता है, इसलिए मुझे लगता है कि मैं बहुत कुछ खत्म कर सकता हूं।viewstate- को न्यूनतम मैं एक पुराने ASP.NET WebForms साइट है कि ViewState हर जगह सक्रिय साफ करने के लिए कोशिश कर रहा हूँ asp.net 4.0

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

यहां मुझे जो कुछ नहीं मिल रहा है।

यदि कोई नियंत्रण या पृष्ठ EnableViewState="false" है तो यह <%.. %> वर्णनकर्ता है, या उसके टैग में जहां यह मूल पृष्ठ में बनाया गया है, सबकुछ टूट जाता है, क्योंकि कोड में जोड़ा गया कोई भी व्यूस्टेट डेटा काम नहीं करता है। इसलिए मैं इसे नियंत्रण स्तर पर सक्षम छोड़ने में सक्षम हूं, लेकिन प्रत्येक कंटेनर में एक रैपर नियंत्रण के लिए EnableViewState को झूठा करने के लिए सेट करें, और उसके बाद प्रति-नियंत्रण स्तर पर ViewStateMode=true (जो कि ovverrides) सेट करें।

क्या मैं नहीं मिल रहा है क्या होता है जब:

ViewStateMode = ViewStateMode.Enabled और EnableViewState = false एक नियंत्रण है कि अन्य नियंत्रण शामिल है के लिए।

नियंत्रण के लिए। आंतरिक नियंत्रण अभी भी ViewStateMode के साथ सक्षम किया जा सकता है? असल में, जब वे संघर्ष करते हैं तो किस सेटिंग में अंतिम शब्द होता है?

1) कोड काम में ViewState सेटिंग्स, और

2) ViewState अक्षम किया गया है:

प्रत्येक कंटेनर के लिए, मैं एक आवरण नियंत्रण में सब कुछ को निष्क्रिय लेकिन अभी भी सुनिश्चित करना है कि करने के लिए सक्षम होना चाहते हैं डिफ़ॉल्ट रूप से सभी नियंत्रणों के लिए, और

3) मैं उपरोक्त के लिए व्यूस्टेट को चुनिंदा रूप से सक्षम कर सकता हूं।

यह तर्क गुमराह हो रहा है। यदि मेरे पास मास्टर पेज में एक रैपर नियंत्रण है जो EnableViewState="false" पर सेट है, लेकिन फिर ViewStateMode="Enabled" पर एक उपकुंजी सेट करें, तो यह टूट जाता है। एमएस के मुताबिक, व्यूस्टेटमोड को बाहरी आउटस्टेट सेटिंग्स को सुपरसीड करना चाहिए, फिर भी यह काम नहीं कर रहा है।

+1

यदि आप जानकारी का एक महत्वपूर्ण टुकड़ा देते हैं तो यह प्रश्न उत्तर देना बेहद आसान है: एएसपी.नेट का कौन सा संस्करण? –

+0

क्षमा करें! Asp.net 4.0। –

उत्तर

14

MSDN article on ViewStateMode के अनुसार, ViewStateMode का अर्थ केवल EnableViewState="true" है। आप जो चाहते हैं उसे प्राप्त करने के लिए, आपको नियंत्रण पर ViewStateMode="Enabled" छोड़ना होगा, और फिर asp:Placeholder में मुख्य के उप-नियंत्रण को लपेटना होगा जिसमें ViewStateMode="Disabled" है। इस तरह, आप अभी भी कोडबेंड में व्यूस्टेट में हेरफेर कर सकते हैं, लेकिन किसी भी बच्चे के नियंत्रण में व्यूस्टेट नहीं होगा (जिन्हें आप स्पष्ट रूप से ViewStateMode="Enabled" के माध्यम से सेट करते हैं) को छोड़कर।

+0

धन्यवाद।मैंने कुछ भ्रम के बाद इसे समझ लिया था और मूल रूप से प्रत्येक नियंत्रण/पृष्ठ के लिए 'ViewStateMode = "सक्षम" सेट किया है, इसे एक रैपर के लिए' अक्षम 'सेट करें, और इसे केवल विशिष्ट नियंत्रणों के लिए' सक्षम 'सेट करें। लगता है कि अब तक बहुत सारी आश्चर्यों के बिना काम कर रहा है और व्यूस्टेट कचरा की मात्रा काफी कम हो गई है .. –