2011-02-05 12 views
158

Ho un oggetto DropDownList nella mia pagina web. Quando clicco su di esso e seleziono un valore diverso, non succede nulla, anche se ho una funzione collegata all'evento SelectedIndexChanged. Cercherò di postare il mio codice qui come ordinata possibile:L'evento SelectedIndexChanged di DropDownList non viene attivato

In primo luogo, il codice HTML dell'oggetto attuale:

<asp:DropDownList ID="logList" runat="server" 
     onselectedindexchanged="itemSelected"> 
</asp:DropDownList> 

E questa è quella funzione, itemSelected:

protected void itemSelected(object sender, EventArgs e) 
{ 
    Response.Write("Getting clicked; " + sender.GetType().ToString()); 
    FileInfo selectedfile; 
    Response.Write("<script>alert('Hello')</script>"); 
    foreach (FileInfo file in logs) 
    { 
     if (file.Name == logList.Items[logList.SelectedIndex].Text) 
     { 
      Response.Write("<script>alert('Hello')</script>"); 
     } 
    } 
} 

Nessuno di appaiono le risposte e quella porzione di JavaScript non viene mai eseguita. Ho provato questo sull'ultima versione 3.6 di Firefox, oltre a Internet Explorer 8. Questo viene offerto da un computer Windows Server 2003 R2, con ASP.Net con .NET Framework versione 4.

Se qualcuno può aiutare, sarebbe fantastico.

+0

Gente, una risposta è già stata data e selezionata, non è necessario continuare a rispondere a questa domanda. – TGP1994

risposta

340

Imposta la proprietà DropDownList AutoPostBack su true.

Esempio:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
     onselectedindexchanged="itemSelected"> 
    </asp:DropDownList> 
+3

Beh, sembra averlo risolto, grazie. Puoi spiegare perché? – TGP1994

+2

@ TGP1994: la proprietà AutoPostBack viene utilizzata per impostare o restituire o meno un postback automatico –

+1

Quando si seleziona l'elenco a discesa, passa al primo valore dell'elenco –

72

provare l'impostazione AutoPostBack="True" in DropDownList.

38

so la sua parte più vecchio, ma ancora mi piacerebbe aggiungere qualcosa alle risposte di cui sopra.

Potrebbe esserci qualche situazione in cui il valore "" di più di una voce nell'elenco a discesa è duplicato/uguale. Quindi, assicurarsi che non avete valori ripetuti nelle voci di elenco per attivare questo "OnSelectedIndexChanged" evento

1

invece di quello che hai scritto il codice è possibile scrivere direttamente l'evento SelectedIndexChanged del controllo DropDownList esempio

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e) 
{ 
*************** 
*********** 
**** 
} 
+0

Solo se l'impostazione AutoEventWireup sulla pagina aspx è vera, altrimenti è necessario eseguirla manualmente, come nell'esempio originale. –

10

Aggiungere proprietà ViewStateMode="Enabled" e EnableViewState="true" E AutoPostBack="true" in calo DropDownList

Per maggiori dettagli click here

1

Per me risposta è stata attributo pagina aspx, ho aggiunto Async = "true" per gli attributi della pagina e questo risolto il mio problema

<%@ Page Language="C#" MasterPageFile="~/MasterPage/Reports.Master"..... 
    AutoEventWireup="true" Async="true" %> 

Questa è la struttura del mio pannello di aggiornamento

<div> 
    <asp:UpdatePanel ID="updt" runat="server"> 
    <ContentTemplate> 

     <asp:DropDownList ID="id" runat="server" AutoPostBack="true"  onselectedindexchanged="your server side function" /> 

    </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
2

Inoltre assicurarsi che la pagina è valida. È possibile controllare questo negli strumenti di browser per sviluppatori (F12)

Nella scheda Console selezionare la corretta destinazione/Frame e verificare la proprietà [Page_IsValid]

Se la pagina non è valido il modulo non presenterà e quindi non licenziare l'evento.

+0

Voto in rialzo per HerbalMart. Nel mio caso la pagina non era valida, ma poiché utilizzo Telerik RadAjaxManager sulle mie pagine, l'errore non veniva visualizzato quando provavo nel mio browser. Quando ho commentato l'intero RadAjaxManager l'errore si è presentato e sono stato in grado di risolverlo. – user2721607