2011-02-15 14 views
6

मैं एक साधारण Asp.Net वेबसाइट बनाने की कोशिश कर रहा हूं जो कुछ फ़ाइलों को सूचीबद्ध करेगा। प्रत्येक फाइल की जांच की जरूरत है। अब तक सब ठीक है. मैंने web.config में व्यूस्टेट को अक्षम कर दिया है, लेकिन मैं अभी भी एक दृश्य मानों के साथ समाप्त हो रहा हूं। के बाद यह ViewStateDecoder 2 अनुप्रयोग के साथ डिकोडिंग, मुझे पता चला है कि मेरे ViewState इस तरह दिखता है:एएसपी कैसे प्राप्त करें: व्यूस्टेट से चेकबॉक्स बाहर? (__ControlsRequirePostBackKey__)

<?xml version="1.0" encoding="utf-16"?> 
<controlstate> 
    <HybridDictionary> 
    <DictionaryEntry> 
     <String>__ControlsRequirePostBackKey__</String> 
     <ArrayList> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl01$d__bin</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl02$d__obj</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl02$ctl00$ctl00$d__Debug</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl02$ctl00$ctl00$ctl00$ResGen_read_1_tlog</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl02$ctl00$ctl00$ctl00$ResGen_write_1_tlog</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl03$d__Properties</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl03$ctl00$AssemblyInfo_cs</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl04$d____UpgradeReport__Files</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl04$ctl00$UpgradeReport_css</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl04$ctl00$UpgradeReport_xslt</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl04$ctl00$UpgradeReport__Minus_gif</String> 
     <String>ctl00$ContentPlaceHolder1$DirectoryLister1$ctl04$ctl00$UpgradeReport__Plus_gif</String> 
     </ArrayList> 
    </DictionaryEntry> 
    </HybridDictionary> 
</controlstate> 

प्रत्येक चेकबॉक्स मैं कि प्रतिपादन यह में है! मैं वहां से चेकबॉक्स कैसे प्राप्त कर सकता हूं? कोई भी बक्से PostBack ट्रिगर करता है। मैंने fileCheckBox.AutoPostBack = false; की कोशिश की है, लेकिन यह कुछ भी हल नहीं करता है।

तो मेरा सवाल है: मैं अपने चेकबॉक्स को व्यूस्टेट में पोस्ट बैक जानकारी पंजीकृत करने से कैसे रोक सकता हूं?

 CheckBox fileCheckBox = new CheckBox(); 
     fileCheckBox.AutoPostBack = false; 
     fileCheckBox.CssClass = "file " + GetExtension(file.Name); 
     fileCheckBox.ID = MakeId(file.Name); 
     fileCheckBox.Checked = true; 
     fileCheckBox.Text = file.Name; 
     children.Controls.Add(fileCheckBox); 

ViewState को अक्षम करने के लिए नियंत्रण या तो काम नहीं करता:

यह मेरी UserControl में कोड कि प्रत्येक फ़ाइल के लिए एक चेकबॉक्स उत्पन्न करता है।

थ्योरी

मैं एक Page.RegisterRequiresPostBack या कुछ करने से नियंत्रण संदेह है। क्या इसे रोका जा सकता है?

+0

मुझे आपके द्वारा पोस्ट किए गए व्यूस्टेट में फ़ाइल चेकबॉक्स नहीं दिखाई देता है। –

+0

जहां चेकबॉक्स हैं? – V4Vendetta

+0

ctl00 $ ContentPlaceHolder1 $ DirectoryLister1 $ ctl04 $ ctl00 $ UpgradeReport__Plus_gif <एक चेकबॉक्स है :-) यह मेरे UserControl द्वारा प्रदान किए गए चेकबॉक्स की आईडी है। –

उत्तर

2

चेकबॉक्स (टेक्स्टबॉक्स और ड्रॉपडाउनलिस्ट) केवल उनके मूल्यों को जारी रखने के लिए व्यूस्टेट का उपयोग नहीं करते हैं। वे पोस्टबैक पर अपने मूल्य रखने के लिए आईपॉस्टबैकडाटा हैंडलर को लागू करते हैं। आपको इस समस्या के लिए अपना स्वयं का समाधान ढूंढना होगा, क्योंकि व्यूस्टेट को अक्षम करने से आपकी मदद नहीं होगी।

विवरण के लिए link देखें।

फिर भी, नियंत्रण बनाने के लिए व्यूस्टेट का उपयोग न करने के लिए, आप System.Web.UI.Control से प्राप्त हर नियंत्रण के लिए EnableViewState = "false" का उपयोग कर सकते हैं।

+0

मुझे लगता है कि एक नियंत्रण एक पृष्ठ करता है। रजिस्ट्रार आवश्यकताएँपोस्टबैक (यह); अगर मैं अपने नियंत्रण में ऐसा कुछ करता हूं, तो यह व्यूस्टेट में समाप्त होता है। –

1

व्यूस्टेट के खिलाफ काफी लड़ने के बाद, मुझे एक ही समस्या का समाधान मिला।

मैंने कक्षा HtmlInputCheckBox को ओवरराइड कर दिया है।

यहां उदाहरण है।

public class CheckBoxFenixHTML : HtmlInputCheckBox 
    { 

     public CheckBoxFenixHTML() 
     { 
     } 


     protected override void OnPreRender(EventArgs e) 
     { 
      ViewState.SetItemDirty("checked", false); 

     } 

    } 

यह मेरे लिए ठीक काम करता है।

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