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.

Respuestas:


399

Establezca la AutoPostBackpropiedad DropDownList en true.

P.ej:

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

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


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 "


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


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.


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>

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
}

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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.