2012-09-07 23 views
5

मुझे बहुत सामान्य एएसपी.NET ड्रॉपडाउन सूची में समस्या है। मेरे पास AutoPostback=false के साथ पृष्ठ में एक ड्रॉपडाउन सूची है। और एक कोड dropdownlist की सामग्री उत्पन्न करने के लिए:ड्रॉपडाउनलिस्ट चयनित इंडेक्स पेज रीफ्रेश पर काम नहीं करता

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.dropDownList.Items.Add(new ListItem("text1", "value1")); 
     this.dropDownList.Items.Add(new ListItem("text2", "value2")); 
     this.dropDownList.SelectedIndex = 0; 
    } 
} 
  • पेज चलाएँ, और दूसरा विकल्प चुनें: टेक्स्ट 2।
  • उसके बाद, प्रेस F5, यह एक पृष्ठ लोड (ध्यान दें कि मैं अभी तक कोई पोस्टबैक नहीं किया है, सिर्फ DropDownList के चयनित आइटम और प्रेस F5 बदल) करना होगा

मैं उम्मीद है कि dropdownlist होगा अब index = 0 के साथ डिफ़ॉल्ट आइटम का चयन किया है, लेकिन चयनित आइटम अभी भी आइटम "text2" है - जो आइटम मैंने चुना है। इस स्थिति में, this.dropDownList.SelectedIndex = 0; काम नहीं करता है।

मैं पूरी तरह से समझ में नहीं आता। क्या कोई मेरी मदद कर सकता है?

अद्यतन: यह व्यवहार केवल फ़ायरफ़ॉक्स में होता है, यह क्रोम/आईई में नहीं होता है।

+0

आप एक autopostback सच पेज करते हैं जब यदि ब्लॉक हिट नहीं करता और आप txt2 को चयनित चाल के रूप में प्राप्त करते हैं> this.dropDownList.SelectedIndex = 0; ! Ispostback ब्लॉक – Devjosh

+0

से बाहर है लेकिन मैं ऑटोपोस्टबैक = झूठी कर रहा हूं और कोड यह.dropDownList.SelectedIndex = 0; – user1514431

+0

हिट किया जा रहा है मेरा बुरा मैं इसे – Devjosh

उत्तर

1

जब आप F5 दबाते हैं, तो यह अनुरोध के साथ पोस्ट हेडर भेज देगा।
आपका अंतिम अनुरोध दूसरा विकल्प चुनना था। तो यह चुना जाता है।

यदि आप फिर से यूआरएल टाइप करते हैं, या पता बार में एंटर दबाते हैं; आप पोस्ट डेटा नहीं भेजेंगे। इस मामले में आपका चयनित इंडेक्स 0.

+0

में अच्छी तरह से समझा नहीं गया +1 – Devjosh

+0

यह वास्तव में दिलचस्प है। तो, आखिरी अनुरोध को भूलने का कोई समाधान है, और बस मुझे पहले आइटम का चयन करें जैसा मैं चाहता हूं? – user1514431

+1

F5 अंतिम अनुरोध को फिर से भेजने के लिए है। आप एचटीएमएल 5 इतिहास एपीआई में देख सकते हैं। यह मदद कर सकता है। इसके अलावा आप जावास्क्रिप्ट में F5 के लिए सुन सकते हैं और 'location.href' सेट कर सकते हैं। – nunespascal

2

ऐसा लगता है कि आप पोस्ट का अर्थ गलत समझ रहे हैं; यह का मतलब है केवल एक पेज रीफ्रेश करें। जब आप ब्राउज़र में F5 दबाते हैं, तो मूल अनुरोध सर्वर पर भेजा जाएगा, और Page.IsPostBackझूठा होगा।

यदि आप वास्तविक पोस्टबैक करना चाहते हैं, तो पृष्ठ पर asp:Button सर्वर नियंत्रण जोड़ें और इसे क्लिक करें (या बस ड्रॉपडाउनलिस्ट पर AutoPostBack=true सेट करें)।


ऐसा लगता है कि फ़ायरफ़ॉक्स क्लाइंट-साइड संचय किसी तरह का कर रही है, इसलिए जब आप F5 मारा यह सर्वर के लिए एक और राउंड ट्रिप नहीं है। पेज लोड होने पर आप select तत्व को रीसेट करके इसके आसपास काम कर सकते हैं।

<script type='text/javascript'> 
    document.getElementById('<%= dropDownList.ClientID %>').selectedIndex = 0; 
</script> 

(नोट:। पृष्ठ के तल पर इस डाल तो यह कार्यान्वित करने के बाद दस्तावेज़ लोड किया है कि) (! Ispostaback)

+0

आपकी व्याख्या के लिए धन्यवाद। मैं यहां क्या करने की कोशिश कर रहा हूं वह उस मामले को संभालना है जिसे उपयोगकर्ता F5 बटन दबाएगा (या ब्राउज़र में रीफ्रेश बटन दबाएं)। – user1514431

+0

@ user1514431 मैंने आपके प्रश्न को बेहतर तरीके से संबोधित करने के लिए अपना उत्तर अपडेट किया। – McGarnagle

+0

बढ़िया! मैं एफएफ के साथ काम करने के लिए भी ऐसा कर रहा हूं। लेकिन मुझे बेहतर समाधान भी मिल रहा है क्योंकि यह व्यवहार न केवल ड्रॉपडाउन सूची के लिए होता है बल्कि पेज (टेक्स्टबॉक्स, चेकबॉक्स ...) में हर नियंत्रण के लिए होता है। कम से कम हमें यहां अंतिम उपाय के रूप में समाधान मिला। – user1514431

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