L'evento SelectedIndexChanged di DropDownList non si attiva


196

Ho un oggetto DropDownList nella mia pagina web. Quando faccio clic su di esso e seleziono un valore diverso, non accade nulla, anche se ho una funzione collegata SelectedIndexChangedall'evento.

Innanzitutto, il codice HTML dell'oggetto reale:

<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>");
        }
    }
}

Non viene visualizzata nessuna delle risposte e quella parte di JavaScript non viene mai eseguita. Ho provato questo sull'ultima versione 3.6 di Firefox, così come su Internet Explorer 8. Questo è servito da un computer Windows Server 2003 R2, che esegue ASP.NET con .NET Framework versione 4.

Risposte:


399

Impostare la AutoPostBackproprietà DropDownList su true.

Per esempio:

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

3
Bene, sembra che l'abbia risolto, grazie. Puoi spiegare perché?
TGP1994,

2
@ TGP1994: La proprietà AutoPostBack viene utilizzata per impostare o restituire se si verifica o meno un postback automatico
Vyas Dev

2
Quando seleziono l'elenco a discesa, viene visualizzato il primo valore dell'elenco
Muhamed Shafeeq,

20
@MuhamedShafeeq - Se stai popolando l'elenco nel metodo Page_Load assicurati di racchiudere il codice if (! IsPostback). Ciò impedirà di ricaricare l'elenco e ripristinarlo al primo elemento.
DaveK,


44

Conosco il suo post un po 'più vecchio, ma comunque vorrei aggiungere qualcosa alle risposte sopra.

Potrebbe esserci una situazione in cui, il " valore " di più di un elemento nell'elenco a discesa è duplicato / stesso. Quindi, assicurati di non avere valori ripetuti nelle voci dell'elenco per attivare questo evento " onselectedindexchanged "


Due dei miei valori erano duplicati e ciò stava causando che non si attivasse l'evento onselectedindexchanged anche se il postback stava accadendo. Grazie per questo!
Mike

il valore selezionato del menu a discesa aveva null in molti articoli. controlla nella query che il valore non sia nullo.
Dinesh Kumar,

12

Aggiungere proprietà ViewStateMode="Enabled"e EnableViewState="true" E AutoPostBack="true"a goccia DropDownList


le proprietà ViewState non sono necessarie e AutoPostBack è stato suggerito in risposte multiple anni prima di questo.
TylerH,

4

Assicurati anche che la pagina sia valida. Puoi verificarlo negli strumenti per sviluppatori del browser (F12)

Nella scheda Console selezionare il Target / Frame corretto e verificare la proprietà [Page_IsValid]

Se la pagina non è valida, il modulo non verrà inviato e quindi non verrà generato l'evento.


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

Questo può essere utile per le persone che hanno questo problema, ma è come dire alle persone la cui macchina non si avvia quando si gira la chiave "assicurarsi che i fari funzionino o non si sarà in grado di vedere quando si guida di notte". In altre parole, questo non risponde alla domanda che viene posta.
TylerH,

3

Per me la risposta era l'attributo della pagina aspx, ho aggiunto Async = "true" agli attributi della pagina e questo ha 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>

1

Invece di ciò che hai scritto, puoi scriverlo direttamente nell'evento SelectedIndexChanged del controllo dell'elenco a discesa, ad es.

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
 //code goes here
}

1
Solo se l'impostazione AutoEventWireup nella pagina aspx è vera, altrimenti è necessario farlo manualmente, come nell'esempio originale.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.