2011-08-11 6 views
5

Tengo esta DropDownList dentro de una lista de datos.ASP.NET - DropDownList contiene un valor incorrecto en el Browser-Back-Button

<asp:DropDownList runat="server" ID="DDL_ProdCat" OnSelectedIndexChanged="DDL_ProdCat_SelectedIndexChanged" 
        Autopostback="true" DataTextField="Name" DataValueField="ID" /> 

Cuando el usuario realiza una selección en este DropDownList, para algunas selecciones, se les redirige a una página separada.

Después de ser redirigido, el usuario pulsa su botón de retroceso del navegador, se devuelven a esta página con la DropDownList.

Desafortunadamente, la selección que los redireccionó a la nueva página todavía está seleccionada.

Ejemplo

  • DDL contiene A, B - Valor inicial seleccionada: Un usuario
  • selecciona B - devolución de datos las redirecciona a otra página
  • usuario selecciona "traseras" en el navegador
  • La página ahora muestra "B" como seleccionada mientras que el estado de la página sugiere que "A" aún debe seleccionarse. La página nunca puede estar en el estado "B" porque "B" está marcada para redirigir a los usuarios a esa otra página.

¿Hay alguna manera de restablecer la selección DropDownList a un valor determinado cuando el usuario vuelve a visitar la página mediante el botón de retroceso del navegador?

Nota

  • me veo obligado a utilizar un DDL aquí, debido a que el caso común es que una redirección no se produce. Entiendo que generalmente no es la mejor opción para vincular usuarios a otras páginas.
  • Por desgracia, no soy capaz de desactivar el navegador de almacenamiento en caché para toda la página para obtener un rendimiento razones
+0

Tal vez un script del lado del cliente para restablecer las selecciones de DDL a su llegada a través del botón de vuelta? –

Respuesta

4

Si está bien para eliminar el nivel de página del navegador de almacenamiento en caché, se puede tratar de eliminar la caché de modo que recarga la página cuando el usuario regresa. Agregue esto a la carga de la página:

Response.Expires = 0 
Response.Cache.SetNoStore() 
Response.AppendHeader("Pragma", "no-cache") 
+0

Oh, no me di cuenta de que no podías desactivar el almacenamiento en caché. Desprecie entonces. –

+0

¿Cuál es la diferencia entre esto y Response.Cache.SetCacheability (HttpCacheability.NoCache)? –

+0

Gracias por el consejo Paul, no estaba claro en mi pregunta inicial con respecto al almacenamiento en caché de nivel de página –

0

Como se sugiere, use JavaScript en la página para volver a establecer la selección en el menú desplegable.

0

Aquí está el código que funcionó para mí:

<script type="text/javascript"> 
    window.onload = function() { 
    var ControlValue = document.getElementById("<%= DropDownList.ClientID %>"); 
    if (ControlValue.value != origControlValue) { 
     ControlValue.value = origControlValue; 
    } 
    } 
    var origControlValue = document 
    .getElementById("<%= DropDownList.ClientID %>").value; 
</script> 
Cuestiones relacionadas