2012-01-02 22 views
8

पर SelectedIndexChanged आग नहीं करता मैं सरल कोड निम्नलिखित है:dropdownlist में पहला आइटम सभी

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testForm.aspx.cs" Inherits="Orbs.testForm" %> 
<html> 
<body> 
    <form id="form1" runat="server"> 
     <asp:DropDownList ID="dropdown1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="dropdown1_SelectedIndexChanged" ViewStateMode="Enabled"> 
      <asp:ListItem Value="1" Text="Item 1" /> 
      <asp:ListItem Value="2" Text="Item 2" /> 
      <asp:ListItem Value="3" Text="Item 3" /> 
      <asp:ListItem Value="4" Text="Item 4" /> 
      <asp:ListItem Value="5" Text="Item 5" /> 
     </asp:DropDownList> 
     <asp:Label runat="server" ID="label1"></asp:Label> 
    </form> 
</body> 
</html> 

और जब पहली बार मैं पृष्ठ दर्ज इसके पीछे

using System; 

namespace Orbs { 
    public partial class testForm: System.Web.UI.Page { 
     protected void Page_Load(object sender, EventArgs e) { 
      label1.Text = "???!!"; 
     } 

     protected void dropdown1_SelectedIndexChanged(object sender, EventArgs e) { 
      label1.Text = "Fired on " + dropdown1.SelectedValue; 
     } 

    } 
} 

मेरी कोड है, label1 दिखाता है '???!!'। अब मैं ड्रॉपडाउन से एक आइटम चुनता हूं और label1 सही मान दिखाता है लेकिन जब मैं ड्रॉपडाउन में पहला आइटम चुनता हूं, तो यह Fired on 1

के बजाय ???!! दिखाता है, जहां मैं गलत कर रहा हूं?

संपादित करें: मैंने देखा है कि अगर मैं ड्रॉपडाउन में किसी भी आइटम में Selected="True" जोड़ता हूं, तो वह आइटम पीड़ित हो जाता है और घटना को आग नहीं पहुंचाएगा!

+0

ओह, क्षमा करें क्या आप घटना पर ब्रेक पॉइंट देख सकते हैं? – IamStalker

+0

नहीं, जब मैं पहली वस्तु का चयन कर रहा हूं तो यह फायरिंग नहीं है। शेष वस्तुओं का चयन करने से – AaA

+0

अच्छी तरह से मुझे लगता है कि जब आप पहली आइटम का चयन कर रहे हैं तो इंडेक्स बदल गया है, क्योंकि वास्तव में यह वही इंडेक्स है जिस पर यह – V4Vendetta

उत्तर

3

मैं अपने आप को समस्या हल,

मैंने कहीं पढ़ा है कि ViewStateMode को बंद करने DropDownList ठीक से काम नहीं का कारण होगा। मेरे वेब एप्लिकेशन में मुझे कुछ वैश्विक कार्य प्राप्त करने के लिए ViewStateMode बंद करना पड़ा और मामले के मामले में इसे चालू करना पड़ा।

किसी तरह DropDownList पर ViewStateMode को चालू करने से काम नहीं कर रहा, मैं भी पेज और मास्टर पेज के लिए ViewStateMode को चालू करने की कोशिश की, लेकिन अभी भी DropDownList काम नहीं किया। यह केवल तब काम करता था जब मैंने web.config में चालू किया।

web.config में ViewStateMode को चालू करने के रूप में एक विकल्प नहीं है, मैंने पाया और वैकल्पिक समाधान। मैं यह उम्मीद कर रहा हूं कि यह किसी की मदद करे।

  • अपने फॉर्म में HiddenField जोड़ें।
  • Page_Load में Request.Forms[DropDownList1.UniqueID]
  • साथ HiddenField के मूल्य की तुलना में यदि वे अलग हैं, फोन SelectedIndexChanged मैन्युअल
  • Request.Forms[DropDownList1.UniqueID] के मूल्य के HiddenField का मूल्य निर्धारित करें।
+3

बस इस पर अनुवर्ती करने के लिए। मैंने ViewStateMode = ड्रॉपडाउन नियंत्रण पर सक्षम किया और समस्या को हल किया। शायद अब और उसके बीच कुछ बदल गया है। – Edyn

+0

यदि आप मेरा नमूना कोड देखते हैं, तो 'ViewStateMode = Enabled' पहले से मौजूद है लेकिन मैंने इसे' web.config' में अक्षम कर दिया है और यह – AaA

+0

पर काम नहीं कर रहा था। ViewStateMode = ड्रॉपडाउन नियंत्रण पर सक्षम भी मेरे लिए काम किया। – Kayes

0

ऐसा इसलिए हो रहा है क्योंकि आप लेबल को "??? !!" पर सेट कर रहे हैं। हर पेज घटना।

आपको पोस्टबैक का पता लगाने के लिए अपने पृष्ठ लोड को संशोधित करने की आवश्यकता नहीं है।

protected void Page_Load(object sender, EventArgs e) { 
     if(!IsPostBack) 
     { 
      label1.Text = "???!!"; 
     } 
    } 
+0

के साथ आज़मा सकते हैं। मेरे पास पहले से ही वही उत्तर था जिसने अपनी टिप्पणी हटा दी थी। अगर मैं 'पेज_लोड' से रेखा को हटा देता हूं, फिर भी 'ड्रॉपडाउन 1_SelectedIndexChanged' ईवेंट नहीं होगा और लेबल खाली रहता है – AaA

1

एक ही मुद्दा था - जब पहली विकल्प का चयन SelectedIndexChanged आग नहीं करता है, मेरे नहीं साफ समाधान था (यकीन नहीं कि इतने होशियार था, लेकिन यह मेरे लिए काम),

Page_Load मैं पर अनुवर्ती स्क्रिप्ट कहा:

if (!IsPostBack) 
     { 

      //bind data first time 
     } 
     else 
     { 
      int ddlSortByValue = int.Parse(ddlSortBy.SelectedValue); 
      if (ddlSortByValue == 0) 
      { 
       ddlSortBy_SelectedIndexChanged(this, EventArgs.Empty); 
      } 

     } 

इस तरह मैं

+0

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

13

अभी भी समस्या हो रही किसी के लिए ऊपर आग SelectedIndexChanged का ईवेंट मजबूर; मैंने इसे एक अलग, अभी तक आसान तरीके से हल किया: ड्रॉपडाउनलिस्ट की शुरुआत में बस एक डमी ListItem जोड़ें और उस आइटम की सक्षम संपत्ति को गलत पर सेट करें। अर्थात

<asp:DropDownList ID="dropdown1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="dropdown1_SelectedIndexChanged" ViewStateMode="Enabled"> 
     <asp:ListItem Value="" Text="" Enabled="false" /> 
     <asp:ListItem Value="1" Text="Item 1" /> 
     <asp:ListItem Value="2" Text="Item 2" /> 
     <asp:ListItem Value="3" Text="Item 3" /> 
     <asp:ListItem Value="4" Text="Item 4" /> 
     <asp:ListItem Value="5" Text="Item 5" /> 
    </asp:DropDownList> 
+0

सही उत्तर – Eddy

1

यह सवाल सभी संभावनाओं वहाँ बाहर अन्य पदों की तुलना में बेहतर को शामिल किया गया है, इसलिए मैं इस स्पष्ट जवाब जोड़ रहा। मेरे मामले में @ एडिन की टिप्पणी ने काम किया, भले ही मूल समस्या में पहले से ही यह है:

ड्रॉपडाउन नियंत्रण पर ViewStateMode="Enabled" सेट करें।
मैंने इसे पृष्ठ के शीर्ष पर पृष्ठ की घोषणा पर भी सेट किया है, बस मामले में।

यह नेट 4.0 है, तो शायद कुछ बदल गया था (लेकिन निश्चित रूप से अच्छी तरह से तय नहीं किया गया)।

1

मैं एक ही समस्या थी, लेकिन मैं onindexchanged समारोह मैन्युअल बुला, इस तरह से इसे हल:

ddl_SelectedIndexChanged(null, null); 

मैं जानता हूँ कि यह सही तरीका नहीं हो सकता है, लेकिन यह मेरे लिए काम कर रहा है।

+0

यदि आप चयनित इंडेक्स को मैन्युअल रूप से चेंज करते हैं तो मैन्युअल रूप से आपकी विधि दो बार दौड़ जाएगी यदि उपयोगकर्ता पहले के अलावा अन्य आइटम चुनता है। – AaA

0

मेरे मामले में, ऐसा इसलिए हुआ क्योंकि मैंने स्थानीय ड्रॉपडाउनलिस्ट चर का उपयोग करके उस ड्रॉपडाउन को संदर्भित किया था, और फ़ंक्शन के अंत में उस चर को अलग कर दिया था। मैं डेटासोर्स सेट करने के बाद ड्रॉपडाउन सूची में पहला आइटम जोड़ रहा था। इसे खोजने के लिए मुझे 2 घंटे लगे, और मैंने निपटान कॉल को हटा दिए जाने के बाद पूरी तरह से काम किया।

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