2009-03-22 29 views
5

Hey, ... pregunta muy simplelista desplegable no se restablece en la página de recarga

suelo escribir PHP, pero da la casualidad que la programación con ASP.NET Framework 3.0 ahora y no puede encontrar la manera de solucionar este problema.

Tengo una lista desplegable y si he seleccionado un cierto valor, ... mi código hace detrás de un montón de cosas y da salida a los datos ......

Ahora, ... si vuelvo a cargar el página (es decir, presione F5 o la pequeña recarga en el navegador) .... todos mis datos se restablecen como si mi selectedIndex es 0 ... ¡pero el valor que muestra es el anterior que seleccioné! ... lo intento para restablecer el índice en mi código detrás en la declaración "if ispostback = false" ... pero nada funciona ... es como si el valor está en caché y nada que pueda hacer lo cambia ...

. ... cualquier ayuda sería apreciada :)

(explicación adicional: .... si imprime en pantalla un mydropdownlist.selectedIndex de mi carga de página Sub ... Devolverá un 0 ... sin embargo, el índice seleccionado en la pantalla claramente no es el 0 ... .I entender por qué esto está ocurriendo ... sólo hay que detenerlo .... o al menos tener una forma de determinar el índice en el estado de vista ...)

Andrew

Respuesta

5

Este es el comportamiento normal de los campos de formulario. Por lo general, los navegadores intentan recordar el contenido de los campos de texto, los estados de las casillas de verificación y los elementos seleccionados en los menús desplegables sobre eventos como recargar página y atrás/adelante.

Por esta razón, no debe suponer, durante la inicialización del script, que los valores de los campos de su formulario coincidirán con el contenido que se sirvió en el HTML. Haga que el script olfatee sus valores actuales y establezca sus variables y el estado DOM en consecuencia cuando se cargue la página.

Si realmente desea descartar todos los cambios de campo de formulario de usuario en la recarga/navegación, llame al form.reset() en la inicialización del script para devolverlo al estado HTML. Pero esto puede ser bastante desagradable para el usuario en circunstancias normales.

+0

El problema es cuando intente volver a intentar la lista desplegable.SelectedIndex desde mi lista desplegable en mi página cargarlo PIENSA que es 0 .... no lo que muestra en realidad. ... ¿quieres decir llamar a form.reset() desde javasript o código? ... (¿Tengo que usar un formulario?) – Andrew

+0

reintegrado = recuperar – Andrew

+0

desde JavaScript. Si accede a SelectedIndex desde el código subyacente, está cambiando el código HTML antes de llegar al navegador; no tiene información sobre lo que hace el navegador después de obtener el HTML. – bobince

0

¿Intentaste limpiando el caché en tu navegador? La mayoría de los navegadores admiten Control + F5 como una actualización completa que borrará la memoria caché de la página actual y volverá a cargar toda la página desde el servidor.

1

Pruebe disabling veiwstate en la casilla si no lo necesita.

+1

intenté ... todo el contenido de mi listbox desaparece lol – Andrew

+0

Sí, eso es lo esperado. Tienes que volver a llenar tu lista cada vez. –

+0

ya, ... pero implica otra consulta de base de datos en mi caso particular ... pero es una buena opción para saber, gracias. – Andrew

3

Parece que cuando presiona f5 NO está haciendo una nueva página de recarga. Usted dice que cuando selecciona algo de su lista desplegable, hace un código complejo detrás de las cosas. Bueno, esa acción ES una devolución de datos. Así que presionar f5 DESPUÉS de esa acción no se consideraría una nueva llamada a la página, por lo que el if (IsPostBack == falso) fallaría porque es una devolución de datos.

Tu primera acción provocó que se tratara de una devolución de datos, por lo que al llegar a f5, se realizará una devolución de datos.

Parece que también puede tener algunos problemas con el estado de visualización ya que sus otros controles se están reiniciando. Aunque si está haciendo hide/shows con scripts de cliente, no se conservarán a través del viewstate de todos modos.

+0

Ummm no. Sé que esto es viejo, pero ¿por qué no intentas ejecutar esto a través del depurador antes de comentar? Si presiona f5 o el ícono de actualización, NO se considera una devolución de datos. – TwinPrimesAreEz

+0

@ user3302828 Si su página acaba de hacer una devolución de datos, y presiona el botón de actualización, SERÁ una devolución de datos. Si solo tuviera una carga de página normal e hiciera una actualización, no sería así. Por favor, lea cuál fue mi respuesta, ya que pensé que era bastante clara. Y sí, esto es antiguo ... – Kelsey

+0

No importa cuándo presiono Actualizar en mi navegador (no importa si solo hice 27 devoluciones de otros controles o no), una acción de actualización NUNCA se registra como una devolución de datos para mí. ¿Puedes publicar un ejemplo de cómo presionar actualización se registra como una devolución de datos para usted? ¡Gracias! – TwinPrimesAreEz

0

Saludos, Yo también estoy tratando de borrar una lista desplegable una vez que se selecciona un valor del otro menú desplegable. Cuando el usuario va a enviar el formulario, solo debe haber un menú desplegable que tenga un valor. He iniciado el código como se muestra a continuación, pero el menú desplegable no se restablecerá automáticamente cuando se seleccione un valor del otro menú desplegable.Estoy seguro de que me estoy perdiendo algo muy simple o mi nombre está desactivado. Gracias.

enter code 

`<% @ Page Language = AutoEventWireup = "true" CodeFile = hereda "C#" "homepagestate.aspx.cs"= "_ homepagestate" %>

< form id="form1" runat="server"> 

< asp: DropDownList ID runat = "DropDownList1" = "servidor" AutoPostBack = "true" OnSelectedIndexChanged = "sel"> < asp: ListItem Valor = "- Seleccionar uno o más estados -"> </asp: ListItem> < asp: ListItem Valor = "ALABAMA"> </asp: ListItem>

< /asp:DropDownList> 

< asp: DropDownList ID runat = "DropDownList2" = "servidor" AutoPostBack = "true"> < asp: ListItem Valor = "- Seleccione uno -"> </asp: ListItem> </asp: DropDownList>

 < asp:Button ID="Button1" runat="server" Text="Submit" /></div> 
</form> 

usando Sistema;

usando System.Data;

usando System.Configuration;

usando System.Collections;

usando System.Web;

usando System.Web.Security;

usando System.Web.UI;

usando System.Web.UI.WebControls;

usando System.Web.UI.WebControls.WebParts;

usando System.Web.UI.HtmlControls;

pública _homepagestate parcial de clase: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e) 

{ 

    if (!IsPostBack) 

    { 

     // sel(); 

     DropDownList2.SelectedIndex = 0; 

    } 

}

protected void sel(object sender, EventArgs e) 

{ 

    Response.Write(DropDownList2.SelectedIndex); 

    //DropDownList2.selecteditem = 0; 

} 

}

'

0

Esto es en realidad de salmoncillo niño en una pregunta StackOverflow diferente, además de añadir esto al final de la página:

<script language="javascript"> 
    var B01 = document.getElementById('<%=YourDropDownList.ClientID%>'); 
    B01.selectedIndex = 0; 
</script> 

Sí ... corte total para lo que es, probablemente, un asp.net, pero en mi humilde opinión :-P

Cuestiones relacionadas