2009-03-15 17 views
15

एक PHP पृष्ठभूमि से आ रहा है मैं एक सेवा से दूसरे सेवा में डेटा पकड़ने के लिए स्वच्छ यूआरएल का उपयोग करना पसंद करता हूं।मैं अच्छे के लिए व्यूस्टेट कैसे बंद कर सकता हूं?

हालांकि, मेरे कुछ एएसपी.नेट परियोजनाओं पर मुझे अपने यूआरएल में भयानक व्यूस्टेट पैरामीटर मिलता है।

क्या वैश्विक स्तर पर इसे बंद करने का कोई तरीका है?

मेरे एएसपी.NET ऐप पर इसका क्या असर होगा?

उत्तर

34

आप इस तरह पूरी साइट के लिए viewstate बंद कर सकते हैं यूआरएल व्यूस्टेट एक छिपी हुई फ़ील्ड है जो सर्वर पर पोस्टबैक के साथ भेजी जाती है (जो आम तौर पर पोस्ट का उपयोग करती है)। यह पृष्ठ को क्लाइंट को प्रदान किए जाने पर नियंत्रण की स्थिति रखता है, इसे प्रत्येक पोस्टबैक के साथ भेजता है। यदि यह एप्लिकेशन के लिए काम करता है तो आप इसके बजाय पोस्ट का उपयोग करने के लिए स्विच कर सकते हैं (समस्या फॉर्म निश्चित रूप से प्राप्त करने का उपयोग कर रहा है), अगर जॉन के जवाब पर नज़र डालें।

व्यूस्टेट एएसपीनेट जीवन चक्र में कैसे फ़िट होता है, इस बारे में अधिक जानकारी के लिए इस लिंक को देखें: http://msdn.microsoft.com/en-us/library/ms972976.aspx

4

web.config फ़ाइल को यह करें:

<system.web> 
<pages enableViewState="false" /> 

जिसके अनुसार, आप उस पर नहीं हो रही किया जाना चाहिए:

<Pages enableViewState="false"/> 
10

Reputation Tracker लिखते समय मेरे पास similar question था।

मुझे नहीं पता कि आप इसे runat="server" सेट के साथ कभी भी फ़ॉर्म का उपयोग न करने के अलावा वैश्विक स्तर पर कैसे करते हैं, जो एक सेटिंग से अनुशासन के साथ अधिक है। विशेष रूप से, यदि आपके पास runat="server" एक फॉर्म पर सेट है, तो मुझे विश्वास है कि आपको हमेशा एक व्यूस्टेट पैरामीटर मिलेगा, भले ही आपने इसे हर जगह बंद कर दिया है, इसलिए आपको मान नहीं मिलता है। वैसे भी मेरा अनुभव था।

स्पष्ट रूप से यह आपको कुछ हद तक सीमित करता है, लेकिन मुझे पता चला है कि एएसपी.नेट के उचित हिस्सों के लिए एचटीएमएल सर्वर नियंत्रण (एएसपी.NET नियंत्रणों के बजाय) का उपयोग जीवन को समझने के लिए बहुत आसान बना सकता है।

+0

@ टीएफडी: हालांकि यह निश्चित रूप से कभी-कभी होता है, मुझे विश्वास नहीं है कि यह मामला यहां है। जीएटी क्रियाओं (POST के बजाय) के साथ runat = "server" के साथ प्रपत्रों का उपयोग करना परिणामस्वरूप प्रश्नकर्ता वास्तव में व्यवहार की तरह नहीं है। मेरा जवाब कैसे प्रासंगिक नहीं है? –

+0

@ टीएफडी जॉन सही है, हो सकता है कि आप उस तरह के लिंक जाने से पहले पोस्ट किए गए लिंक देखना चाहें;) – eglasius

+1

जब आप वास्तव में व्यूस्टेट चाहते हैं तो GET संभवतः अनुचित है - लेकिन जब आपको * दृश्य की आवश्यकता नहीं है तो यह बहुत उपयोगी है। विशेष रूप से, पोस्टिंग बैक व्यूस्टेट को सॉर्ट करने की तुलना में जीईटी पैरामीटर के साथ एक यूआरएल बुकमार्क करना बहुत आसान है :) –

3

आप एएसपी.NET एमवीसी पर स्विच कर सकते हैं। जो मैं समझता हूं उससे यह व्यूस्टेट का उपयोग नहीं करता है।

2

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

एक अच्छा उदाहरण एक ड्रॉपडाउन पर SelectedIndexChanged ईवेंट है (जिस पर ऑटोपॉस्टबैक सेट नहीं है)। यह काम करता है क्योंकि व्यूस्टेट पिछले इंडेक्स को बरकरार रखता है, और फॉर्म वर्तमान इंडेक्स को पोस्ट करता है, और नियंत्रण यह पता लगाने के लिए दोनों की तुलना करता है कि चयनित इंडेक्स बदल गया है। वह तब होता है जब यह SelectedIndexChanged ईवेंट उठाता है। व्यूस्टेट के बिना, वह घटना आग नहीं जाएगी। TextChanged घटनाओं के लिए, आदि

जीईटी स्थिति (जिसे मैंने कभी नहीं चलाया) अनुपस्थित करें, व्यूस्टेट के साथ बड़ी समस्या इसका उपयोग कर रही है जहां इसकी आवश्यकता नहीं है। आपके ग्रिड नियंत्रण को सभी पंक्तियों में सभी नियंत्रणों के पिछले मानों को बनाए रखने की आवश्यकता नहीं है, इसलिए उस पर व्यूस्टेट सक्षम न करें।

8

web.config में <page> तत्व का उपयोग कर डिफ़ॉल्ट रूप से व्यूस्टेट को बंद करें। @Page में EnableViewState="true" का उपयोग करने से आप Web.config में व्यूस्टेट को अक्षम करने के बाद अब काम नहीं करेंगे। यदि आप बाद में निर्णय लेते हैं कि आपको किसी विशिष्ट पृष्ठ के लिए व्यूस्टेट की आवश्यकता है, तो आप इसे <location> तत्व का उपयोग करके उस पृष्ठ के लिए वापस चालू कर सकते हैं।

<configuration> 
    <system.web> 
    <pages enableViewState="false" /> 
    </system.web> 

    <location path="MyFolder/MyPage.aspx"> 
    <system.web> 
     <pages enableViewState="true" /> 
    </system.web> 
    </location> 
    <location path="Site.master"> 
    <system.web> 
     <pages enableViewState="true" /> 
    </system.web> 
    </location> 
</configuration> 

आपको अपने व्यूस्टेट सक्षम पृष्ठ का उपयोग करने वाले किसी भी मास्टर पेज के लिए ऐसा करने की आवश्यकता है।

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

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