2009-05-14 12 views
5

व्यूस्टेट को अक्षम करने के लिए सुरक्षित कब है? किस नियंत्रण के लिए? किस सर्कस्टैम्स के तहत?व्यूस्टेट को अक्षम करने के लिए सुरक्षित कब है?

एक उपयोगकर्ता नियंत्रण में मैं विकलांग viewstate है, लेकिन अगर मैं इस पर नियंत्रण

<asp:LinkButton ID="LinkButton1" runat="server" 
    CommandName="Delete" 
    OnClientClick="return confirm('¿Está seguro que desea eliminar el mensaje?');" 
    EnableViewState="true"> 
    <asp:Image ID="ImageButton1" runat="server" ImageUrl="~/Content/Images/delete.png" 
     ToolTip="Eliminar mensaje" /> Eliminar 
</asp:LinkButton> 

में क्लिक करने के लिए प्रयास मैं एक System.InvalidOperationException अपवाद मिलता है। यह एक सूची दृश्य के अंदर है।

उत्तर

3

अधिकांश नियंत्रण व्यवहार करते हैं क्योंकि आप व्यूस्टेट अक्षम के साथ अपेक्षा करेंगे। ग्रिडव्यूज़ जैसी कार्यक्षमता में निर्मित 'गतिशील' नियंत्रण व्यूस्टेट के बिना अच्छी तरह से खेलना नहीं है।

क्या आप सुनिश्चित हैं कि अपवाद व्यूस्टेट से संबंधित है, क्योंकि आपके पास सक्षम नियंत्रण संपत्ति आपके नियंत्रण पर सही है?

+0

अच्छी तरह से, अपवाद था, क्योंकि मैं DataKeyNames propertie निर्धारित नहीं की। लेकिन सवाल समान रूप से मान्य है, है ना? – eKek0

0

आप हमेशा दृश्य स्थिति को अक्षम कर सकते हैं। यदि आपको आवश्यकता है तो पृष्ठ के लिए राज्य को बनाए रखने के अन्य तरीकों को ढूंढना होगा। रास्ते में छिपे हुए फॉर्म फ़ील्ड के पुराने तरीके से उपयोग करना है।

जब तक आप बड़ी, जटिल वस्तुओं को नहीं देख रहे हैं, तो आमतौर पर इसे अक्षम करने का कोई कारण नहीं है।

8

यह इस बात को उबालता है कि क्या आप पृष्ठ को पोस्टबैक में चीजों को याद रखना चाहते हैं या नहीं। आप पुनः कर रहे हैं या प्रत्येक पोस्टबैक viewstate पर मान निर्दिष्ट आवश्यक नहीं है, तो

Here's कुछ अच्छे संकेत

नियंत्रण पर

डायनामिक रूप से सम्मिलित मूल्य (बंधन या प्रोग्राम के रूप में बताए आधार पर) - इस नियंत्रण के मूल्यों पुन: प्रस्तुत होने पर बनाए रखा जाएगा, उदाहरण के लिए व्यू 1 से देखने के लिए 2 स्विचिंग। लेकिन तुम , दो बातों पर विचार करने के लिए यदि आप हर के लिए मूल्यों repopulating लगता प्रस्तुत करना लागू करने के लिए भारी है तो viewstate अक्षम नहीं करेंगे, अगर तो नहीं आप इसे निष्क्रिय कर सकते हैं और पर अपने नियंत्रण reinitialize प्रस्तुत करना है घटना। मैं इसका सुझाव क्यों दे रहा हूं? यह है क्योंकि प्रोसेसिंग सर्वरसाइड कोड सर्वर पर वापस डेटा के जंक को स्थानांतरित करने और को क्लाइंट पर राउंडट्रिप्स पर स्थानांतरित करने से कहीं अधिक तेज़ है।

Datalist और DropDownList पर - आप OnSelectedIndex घटना बदलें उपयोग नहीं कर रहे हैं तो आप viewstate को निष्क्रिय कर सकता।

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

0

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

अधिक जानकारी के लिए कृपया साइट नीचे देखें ...

http://www.pluralsight.com/community/blogs/fritz/archive/2004/07/01/472.aspx

http://msdn.microsoft.com/en-us/magazine/cc163901.aspx

http://www.codeproject.com/KB/user-controls/TestControlStateEx.aspx

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