2012-09-07 18 views
5

Tengo un problema con una lista desplegable de ASP.NET muy normal. Tengo una lista desplegable en la página con AutoPostback=false. Y un código para generar el contenido de lista desplegable:La lista desplegable selectedindex no funciona en la actualización de página

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.dropDownList.Items.Add(new ListItem("text1", "value1")); 
     this.dropDownList.Items.Add(new ListItem("text2", "value2")); 
     this.dropDownList.SelectedIndex = 0; 
    } 
} 
  • ejecutar la página, y elija la segunda opción: texto2.
  • Después de eso, presione F5, esto va a hacer una carga de la página (tenga en cuenta que no he hecho ninguna devolución de datos, sin embargo, sólo cambia el elemento seleccionado de la lista desplegable y pulse F5)

que esperaba que la lista desplegable se ahora seleccionó el elemento predeterminado con index = 0, pero el elemento seleccionado sigue siendo el elemento "texto2", el elemento que he elegido. En esta situación, el this.dropDownList.SelectedIndex = 0; no funciona.

No entiendo totalmente. ¿Alguien podría ayudarme?

Actualización: Este comportamiento solo ocurre en Firefox, no ocurre en Chrome/IE.

+0

cuando se hace una AutoPostBack verdadera la página si el bloque no golpea y obtienes el txt2 como movimiento seleccionado> this.dropDownList.SelectedIndex = 0; fuera del! Ispostback block – Devjosh

+0

pero estoy haciendo AutoPostBack = false y el código this.dropDownList.SelectedIndex = 0; está siendo golpeado – user1514431

+0

Mi mal no pude leer eso en la pregunta – Devjosh

Respuesta

1

Cuando presiona F5, enviará los encabezados de publicación junto con la solicitud.
Su última solicitud fue seleccionar la segunda opción. Entonces eso es seleccionado.

Si escribe la url nuevamente, o presiona enter en la barra de direcciones; no enviarás los datos de la publicación. En este caso, su SelectedIndex será 0.

+0

muy bien explicado +1 ya – Devjosh

+0

Eso es realmente interesante. Entonces, ¿hay alguna solución para olvidar la última solicitud y simplemente seleccionar el primer elemento como yo quiera? – user1514431

+1

F5 está destinado a reenviar la última solicitud. Puede buscar en la API de html5. Puede ayudar. También puedes escuchar F5 en javascript y establecer 'location.href'. – nunespascal

2

Parece que está malinterpretando mensaje atrás medio; lo hace no significa solo una actualización de página. Cuando presione F5 en el navegador, la solicitud original se enviará al servidor, y Page.IsPostBack será falso.

Si desea hacer una devolución de datos real, agregue un control de servidor asp:Button a la página y haga clic en él (o simplemente configure AutoPostBack=true en DropDownList).


Parece que Firefox está haciendo algún tipo de almacenamiento en caché del lado del cliente, por lo que no hace otra de ida y vuelta al servidor cuando se pulse F5. Puede solucionar esto restableciendo el elemento select cuando se carga la página.

<script type='text/javascript'> 
    document.getElementById('<%= dropDownList.ClientID %>').selectedIndex = 0; 
</script> 

(Nota:. Poner esto en la parte inferior de la página para que se ejecute después de que el documento se ha cargado) (! Ispostaback)

+0

Gracias por su explicación. Lo que intento hacer aquí es manejar el caso de que el usuario presione el botón F5 (o presione el botón de actualización en el navegador). – user1514431

+0

@ user1514431 Actualicé mi respuesta para responder mejor a su pregunta. – McGarnagle

+0

¡Genial! Estoy haciendo esto para trabajar con FF también. Pero también estoy encontrando una mejor solución porque este comportamiento ocurre no solo para la lista desplegable, sino también para cada control en la página (cuadro de texto, casilla de verificación ...). Al menos tenemos una solución como último recurso aquí. – user1514431

Cuestiones relacionadas