web-dev-qa-db-fra.com

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

J'ai un objet DropDownList dans ma page Web. Lorsque je clique dessus et que je sélectionne une valeur différente, rien ne se passe, même si une fonction est connectée à l'événement SelectedIndexChanged. Je vais essayer de poster mon code ici le plus ordonné possible:

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

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

Et voici 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é ceci sur la dernière version 3.6 de Firefox, ainsi que sur Internet Explorer 8. Ce service est servi à partir d'un ordinateur Windows Server 2003 R2, exécutant ASP.Net avec .NET Framework version 4.

Si quelqu'un peut aider, ce serait génial.

182
TGP1994

Définissez la propriété DropDownList AutoPostBack sur true.

Par exemple:

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

essayez de définir AutoPostBack="True" sur DropDownList.

76
The Scrum Meister

Je connais son article un peu plus ancien, mais j'aimerais quand même ajouter quelque chose aux réponses ci-dessus.

Il peut y avoir une situation où dans, le "valeur" de plusieurs éléments de la liste déroulante est dupliqué/identique. Donc, assurez-vous 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"

41
4u.Ans

Ajouter la propriété ViewStateMode="Enabled" et EnableViewState="true" Et AutoPostBack="true" dans la liste déroulante DropDownList

12
Dilip Kr Singh

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 cible/le cadre approprié et recherchez la propriété [Page_IsValid].

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

5
HerbalMart

Pour moi, la réponse était un 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" %>

Ceci est 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>
2
Justin F

au lieu de ce que vous avez écrit du code, vous pouvez l'écrire directement dans l'événement SelectedIndexChanged du contrôle dropdownlist, par exemple.

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
***************
***********
****
}
1
user2541273