2008-09-16 27 views
8

Estoy manejando el evento onSelectIndexChanged. Se produce un evento cuando la selección DropDownList cambia. el problema es que DropDownList aún devuelve los valores anteriores para SelectedValue y SelectedIndex. ¿Qué estoy haciendo mal?Controlador de eventos SelectedIndexChanged obteniendo el índice anterior

Aquí es la definición DropDownList desde el archivo aspx:

<div style="margin: 0px; padding: 0px 1em 0px 0px;"> 
    <span style="margin: 0px; padding: 0px; vertical-align: top;">Route:</span> 
    <asp:DropDownList id="Select1" runat="server" onselectedindexchanged="index_changed" AutoPostBack="true"> 
    </asp:DropDownList> 
    <asp:Literal ID="Literal1" runat="server"></asp:Literal> 
</div> 

Aquí está el DropDownList manejador OnSelectedIndexChanged evento:

protected void index_changed(object sender, EventArgs e) 
{ 
    decimal d = Convert.ToDecimal(Select1.SelectedValue); 
    Literal1.Text = d.ToString(); 
} 

Respuesta

12

¿Tiene cualquier código de carga de la página que es por casualidad re- ¿predeterminado el valor al primer valor?

Cuando la página vuelve a cargar, ¿ve el nuevo valor?

+0

sí, eso es lo primero que pensé así. – Danimal

+0

Lo comprobé y descubrí, para mi sorpresa, que tenía un código en Page_Load que está redefiniendo el valor. ¡Gracias, Mitchel! – minty

+0

Tuve el mismo problema una vez. – axk

0

¿Es posible que tenga elementos copiados a lo largo de su fuente de datos para la lista desplegable?

2

añadir lo siguiente: si page.isnotpostback {

} alrededor de su código para enlazar la lista desplegable.

1

Esto puede parecer obvio, pero de todos modos. ¿Inicializa este menú desplegable con un valor inicial en algún otro controlador de eventos como OnLoad? En caso afirmativo, debe verificar si ese evento ha aumentado por una devolución de datos o por la primera carga. Por lo que debe tener algo como

if(!IsPostback) d.SelectedValue = "Default" 
3

Si está utilizando AJAX también puede estar haciendo una devolución de llamada, no una devolución de datos completa. En ese caso, es posible que desee utilizar este método de carga en su página:

 if (!IsCallback && !IsPostBack) 
     { 
      // Do your page setup here 
     } 
+1

¿Es esto verdad? Estoy bastante seguro de que 'IsPostBack' devolverá' verdadero' en ambos casos. – TZHX

Cuestiones relacionadas