2009-01-08 18 views
7

यदि मेरे पास स्टोर करने के लिए डेटा का एक सरल टुकड़ा है (उदाहरण के लिए एक पूर्णांक या स्ट्रिंग) तो मैं इसे व्यूस्टेट में स्टोर करना चुन सकता हूं, या छुपा फ़ील्ड नियंत्रण का उपयोग कर सकता हूं।व्यूस्टेट या छुपा फ़ील्ड

मैं एक दूसरे को क्यों चुनूं?

ViewState

  • हार्ड उपयोगकर्ता को डिकोड करने के लिए (असंभव नहीं सोचा था), वांछनीय हो सकता है जो

HiddenField

  • मूल्य जावास्क्रिप्ट
  • में
इस्तेमाल किया जा सकता

क्या अन्य पेशेवर हैं डी विपक्ष?

+0

आप सत्र ऑब्जेक्ट –

+0

में डेटा भी स्टोर कर सकते हैं हां, मैं सत्र में स्टोर कर सकता हूं हालांकि इस परिदृश्य में डेटा संबंधित पृष्ठ के लिए केवल प्रासंगिक है, इसलिए encapsulation कारणों से मैं इसे ऑन-पेज स्टोर करना चाहता हूं। –

+1

सत्र में डेटा संग्रहीत करना अनिवार्य रूप से इसे वैश्विक स्तर पर बना देगा। पृष्ठ में इसे संग्रहीत करने से इसका दायरा कम हो जाएगा, जो बेहतर डिजाइन अभ्यास है। –

उत्तर

6

वास्तव में, व्यूस्टेट वास्तव में एक छिपे हुए क्षेत्र में संग्रहीत नहीं है, इसलिए केवल वास्तविक अंतर एन्कोडिंग है।

जब तक आपको जावास्क्रिप्ट के साथ मूल्य में हेरफेर करने की आवश्यकता नहीं है या आप इस पृष्ठ पर व्यूस्टेट को बंद करने की उम्मीद करते हैं तो मैं व्यूस्टेट का उपयोग करूंगा। ज्यादातर इसलिए क्योंकि तीसरे पक्ष के उपकरण हैं (like this one) जो व्यूस्टेट को समझते हैं और जो आपके कस्टम छिपे हुए क्षेत्र को समझ नहीं पाएंगे।

+1

डिफ़ॉल्ट रूप से यह एक छिपे हुए फ़ील्ड में संग्रहीत होता है, हालांकि आप इसे बदल सकते हैं और [सत्र में व्यूस्टेट स्टोर करें] (http://msdn.microsoft.com/en-us/library/system.web.ui.sessionpagestatepersister%28v = vs.110% 29.aspx)। –

0

व्यूस्टेट पृष्ठ में ही संग्रहीत है, इसलिए यह पृष्ठ आकार बढ़ाता है और इससे performance issues हो सकता है।

साथ ही हम पृष्ठ को पृष्ठ के बजाय save the viewstate on server पर कॉन्फ़िगर कर सकते हैं जो कुछ सुरक्षा समस्याओं से बचा सकता है।

Jomit

+0

मुझे यकीन नहीं है कि पृष्ठ आकार तर्क यहां मान्य है - पृष्ठ आकार का आकार चाहे मैं अपना मूल्य व्यूस्टेट में संग्रहीत करता हूं या पृष्ठ पर अतिरिक्त नियंत्रण जोड़ता हूं और वहां मूल्य को स्टोर करता हूं –

+0

पेज आकार के संबंध में रिचर्ड ई के साथ सहमत तर्क; दूसरी तरफ, सर्वर पर व्यूस्टेट स्टोर करने में सक्षम होने के बारे में जोमिट से सहमत हैं। –

3

देखने के एक रख-रखाव की दृष्टि से, मैं ViewState का उपयोग करेंगे। आपके लिए लिखने के लिए यह कम कोड है, जो आपके सॉफ़्टवेयर में विफलता के कम बिंदुओं पर आता है। इसका मतलब यह भी है कि आपके बाद आने वाले किसी भी डेवलपर के पास आपके समाधान को बनाए रखने में आसान समय होगा।

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

0

व्यूस्टेट केवल उस पृष्ठ पर अच्छा है जिस पर आप हैं या पोस्ट कर रहे हैं। एक छिपी हुई फ़ील्ड के साथ आप तो जैसे पृष्ठ वस्तु की PreviousPage विधि का उपयोग कर अगले पृष्ठ आप के लिए (और साथ ही अन्य डेटा) नेविगेट पर डेटा का उपयोग कर सकते हैं:

string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text; 
0

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

छुपा फ़ील्ड मान अगले पृष्ठ पर पोस्ट किया गया है। (नोट: छिपा फ़ील्ड का मान प्राप्त करने के लिए server.transfer का उपयोग करें)।

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