Pregunta

Esta es la situación:Tengo un conjunto de texto de etiqueta, seguido inmediatamente por una llamada de respuesta.redirect() de la siguiente manera (esto es solo un ejemplo, pero creo que describe mi situación con precisión):

aspx:

<asp:Label runat="server" Text="default text" />

Código subyacente (código llamado en un evento onclick):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

Cuando se muestra la página, la etiqueta dice "texto predeterminado".¿Qué necesito hacer diferente?Tenía entendido que tales cambios se realizarían automáticamente entre bastidores, pero aparentemente no en este caso.Gracias.

Para obtener un poco más de información, el fragmento de código subyacente se llama dentro de un método que se invoca en un evento onclick.Hay más, pero sólo incluí lo que es de interés para este tema.

¿Fue útil?

Solución

Después de una redirección, perderá cualquier información de estado asociada a sus controles.Si simplemente desea que la página se actualice, elimine la redirección.Una vez que el código haya terminado de ejecutarse, la página se actualizará y se mantendrá cualquier estado.

Detrás de escena, esto funciona porque ASP.NET escribe la información de estado en un campo de entrada oculto en la página.Cuando hace clic en un botón, el formulario se publica y ASP.NET descifra el estado de visualización.Su código se ejecuta, modifica el estado, y luego el estado se escribe nuevamente en el campo oculto y el ciclo continúa. hasta que cambies la página sin un POST.Esto puede suceder al hacer clic en un hipervínculo a otra página o mediante Response.Redirect(), que indica al navegador que siga la URL especificada.

Otros consejos

A Response.Redirect La llamada le pedirá al navegador del usuario que cargue la página especificada en la URL que le proporcione.Debido a que se trata de una nueva solicitud para su página, la página utiliza el texto contenido en su marcado (ya que supongo que el texto de la etiqueta se establece dentro de un controlador de botón o similar).

Si quitas el Response.Redirect llame a su página debería funcionar como se anuncia.

ASP y ASP.Net son inherentemente sin estado a menos que se especifique explícitamente el estado.Normalmente, entre PostBacks, la información, como el valor de una etiqueta, está contenida en el estado de vista, pero si cambia las páginas, ese estado de vista se pierde porque se estaba almacenando en un campo oculto en la página.

Si desea mantener el valor de la etiqueta entre llamadas, debe utilizar uno de los mecanismos de estado (p. ej.Sesión, Preferencias) o sistemas de comunicación (Solicitud (GET, POST)).

Además, es posible que esté buscando Server.Transfer, que cambiará quién procesa la página detrás de escena.Response.Redirect está diseñado para deshacerse de su contexto actual en la mayoría de los casos.

Para conservar el estado, utilice Server.Transfer en lugar de Response.Redirect.

Entonces, si puedo responder mi propia pregunta (de acuerdo con las preguntas frecuentes, se recomienda), la respuesta corta es que no se conserva el estado de visualización a través de redirecciones.El estado de visualización es para devoluciones de datos, no para redireccionamientos.

Prima: Todo lo que siempre quiso saber sobre Ver estado en ASP.NET, ¡con imagenes!

Por lo que vale (y ojalá valga algo), Capítulo 6 de Pro ASP.NET 3.5 en C# 2008, segunda edición es un excelente recurso sobre el tema.Todo el libro ha sido genial hasta ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top