El evento SelectedIndexChanged de DropDownList no se activa

196

Tengo un objeto DropDownList en mi página web. Cuando hago clic en él y selecciono un valor diferente, no sucede nada, aunque tengo una función conectada al SelectedIndexChangedevento.

Primero, el código HTML del objeto real:

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

Y esta es esa función 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>");
        }
    }
}

Ninguna de las respuestas aparece, y esa parte de JavaScript nunca se ejecuta. He intentado esto en la última versión 3.6 de Firefox, así como en Internet Explorer 8. Esto se sirve desde una máquina Windows Server 2003 R2, que ejecuta ASP.NET con .NET Framework versión 4.

TGP1994
fuente

Respuestas:

399

Establezca la AutoPostBackpropiedad DropDownList en true.

P.ej:

<asp:DropDownList ID="logList" runat="server" AutoPostBack="True" 
        onselectedindexchanged="itemSelected">
    </asp:DropDownList>
Vyas Dev
fuente
3
Bueno, eso parece haberlo solucionado, gracias. ¿Puedes explicar porque?
TGP1994
2
@ TGP1994: la propiedad AutoPostBack se usa para establecer o devolver si se produce una devolución automática o no
Vyas Dev
2
Cuando selecciono la lista desplegable, va al primer valor de la lista
Muhamed Shafeeq
20
@MuhamedShafeeq: si está completando la lista en el método Page_Load, asegúrese de incluir el código en if (! IsPostback). Esto evitará que vuelva a cargar la lista y la vuelva a configurar en el primer elemento.
DaveK
78

intente configurar AutoPostBack="True"en DropDownList.

El Scrum Meister
fuente
44

Sé que es una publicación un poco más antigua, pero aún así me gustaría agregar algo a las respuestas anteriores.

Puede haber alguna situación en la que, en, el " valor " de más de un elemento en la lista desplegable esté duplicado / igual. Por lo tanto, asegúrese de no tener valores repetidos en los elementos de la lista para activar este evento " onselectedindexchanged "

4u.Ans
fuente
Dos de mis valores se duplicaron y eso provocó que no se activara el evento onselectedindexchanged a pesar de que estaba ocurriendo la devolución. ¡Gracias por esto!
Mike
El valor seleccionado del menú desplegable era nulo en muchos elementos. compruebe en la consulta que el valor no sea nulo.
Dinesh Kumar
12

Agregar propiedad ViewStateMode="Enabled"y EnableViewState="true" Y AutoPostBack="true"en soltar DropDownList

Dilip Kr Singh
fuente
las propiedades ViewState no son necesarias, y el AutoPostBack se sugirió en varias respuestas años antes de esta.
TylerH
4

También asegúrese de que la página sea válida. Puede verificar esto en las herramientas de desarrollo de navegadores (F12)

En la pestaña Consola, seleccione el Objetivo / Marco correcto y verifique la propiedad [Page_IsValid]

Si la página no es válida, el formulario no se enviará y, por lo tanto, no se activará el evento.

HerbalMart
fuente
1
Voto a favor de HerbalMart. En mi caso, la página no era válida, pero debido a que utilizo el Telerik RadAjaxManager en mis páginas, el error no se mostraba cuando lo probé en mi navegador. Cuando comenté todo el RadAjaxManager, se presentó el error y pude solucionarlo.
user2721607
Eso puede ser útil para las personas que tienen ese problema, pero es como decirle a las personas cuyo automóvil no arrancará cuando giren la llave "asegúrese de que sus faros funcionen o no podrá ver cuando conduzca de noche". En otras palabras, esto no responde la pregunta que se hace.
TylerH
3

Para mí, la respuesta fue el atributo de página aspx, agregué Async = "true" a los atributos de la página y esto resolvió mi problema.

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

Esta es la estructura de mi panel de actualización

<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>
Justin F
fuente
1

En lugar de lo que ha escrito, puede escribirlo directamente en el evento SelectedIndexChanged del control de lista desplegable, p. Ej.

protected void ddlleavetype_SelectedIndexChanged(object sender, EventArgs e)
{
 //code goes here
}
usuario2541273
fuente
1
Solo si la configuración de AutoEventWireup en la página aspx es verdadera, de lo contrario, debe hacerlo manualmente, según el ejemplo original.