L'événement SelectedIndexChanged de DropDownList ne se déclenche pas


196

J'ai un objet DropDownList dans ma page Web. Lorsque je clique dessus et sélectionne une valeur différente, rien ne se passe, même si j'ai une fonction connectée à l' SelectedIndexChangedévénement.

Tout d'abord, le code HTML de l'objet réel:

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

Et c'est cette fonction 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>");
        }
    }
}

Aucune des réponses n'apparaît et cette partie de JavaScript n'est jamais exécutée. J'ai essayé cela sur la dernière version 3.6 de Firefox, ainsi qu'Internet Explorer 8. Il est servi depuis une machine Windows Server 2003 R2, exécutant ASP.NET avec .NET Framework version 4.

Réponses:


399

Définissez la AutoPostBackpropriété DropDownList sur true.

Par exemple:

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

3
Eh bien, cela semble l'avoir corrigé, merci. Pouvez-vous expliquer pourquoi?
TGP1994

2
@ TGP1994: La propriété AutoPostBack est utilisée pour définir ou renvoyer si une publication automatique se produit ou non
Vyas Dev

2
Lorsque je sélectionne la liste déroulante, sa première valeur va de la liste
Muhamed Shafeeq

20
@MuhamedShafeeq - Si vous remplissez la liste dans la méthode▶Load, assurez-vous d'encapsuler le code dans if (! IsPostback). Cela l'empêchera de recharger la liste et de la remettre sur le premier élément.
DaveK


44

Je connais son post un peu plus ancien, mais je voudrais quand même ajouter quelque chose aux réponses ci-dessus.

Il peut y avoir une situation dans laquelle, la " valeur " de plusieurs éléments dans la liste déroulante est dupliquée / identique. Assurez-vous donc que vous n'avez pas de valeurs répétées dans les éléments de la liste pour déclencher cet événement " onselectedindexchanged "


Deux de mes valeurs ont été dupliquées et cela l'empêchait de déclencher l'événement onselectedindexchanged même si la publication se produisait. Merci pour cela!
Mike

la valeur sélectionnée de la liste déroulante était nulle dans de nombreux éléments. veuillez vérifier dans la requête que la valeur n'est pas nulle.
Dinesh kumar

12

Ajouter une propriété ViewStateMode="Enabled"et EnableViewState="true" et AutoPostBack="true"en baisse DropDownList


les propriétés ViewState ne sont pas nécessaires et l'AutoPostBack a été suggéré dans plusieurs réponses des années avant celle-ci.
TylerH

4

Assurez-vous également que la page est valide. Vous pouvez le vérifier dans les outils de développement des navigateurs (F12)

Dans l'onglet Console, sélectionnez la bonne cible / trame et vérifiez la propriété [▶IsValid]

Si la page n'est pas valide, le formulaire ne sera pas soumis et ne déclenchera donc pas l'événement.


1
Up vote pour HerbalMart. Dans mon cas, la page n'était pas valide, mais comme j'utilise Telerik RadAjaxManager sur mes pages, l'erreur ne s'affichait pas lorsque j'ai testé dans mon navigateur. Lorsque j'ai commenté l'ensemble de RadAjaxManager, l'erreur s'est présentée et j'ai pu la corriger.
user2721607

Cela peut être utile pour les personnes ayant ce problème, mais c'est comme dire aux personnes dont la voiture ne démarre pas quand elles tournent la clé "assurez-vous que vos phares fonctionnent ou vous ne pourrez pas voir lorsque vous conduisez la nuit". En d'autres termes, cela ne répond pas à la question posée.
TylerH

3

Pour moi, la réponse était l'attribut de page aspx, j'ai ajouté Async = "true" aux attributs de page et cela a résolu mon problème.

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

Voici la structure de mon panneau de mise à jour

<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

Au lieu de ce que vous avez écrit, vous pouvez l'écrire directement dans l'événement SelectedIndexChanged du contrôle de liste déroulante, par exemple

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

1
Uniquement si le paramètre AutoEventWireup sur la page aspx est vrai, sinon vous devez le faire manuellement, comme dans l'exemple d'origine.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.