¿Cómo actualizo la página en ASP.NET? (Deja que se vuelva a cargar por código)


158

¿Cómo actualizo una página en ASP.NET? (Deja que se vuelva a cargar por código)

Prefiero no usar Response.Redirect () porque no sé si la página en la que voy a estar, ya que está dentro de un control de usuario dentro de un elemento web dentro de sharepoint.


2
No soy OP, pero una de las razones puede ser porque javascript se puede desactivar
Nathan Koop el

11
ASP.NET se basa en JavaScript, por lo que si un usuario tiene JavaScript desactivado hay un problema más grande ...
jrummell

Respuestas:


45

Una vez que la página se presenta al cliente, solo tiene dos formas de forzar una actualización. Uno es Javascript

setTimeout("location.reload(true);", timeout);

El segundo es una etiqueta Meta:

<meta http-equiv="refresh" content="600">

Puede configurar los intervalos de actualización en el lado del servidor.


¿Dónde debo poner el setTimeout?
Siti

Consulte la respuesta de @gaurav a continuación para ver una buena manera de hacerlo en .NET usando Server.TransferRequest.
sfarbota

Esto puede ser correcto para una página que no utiliza el soporte del lado del servidor, sin embargo, es incorrecto en relación con el .Net especificado. La forma correcta es utilizar Response.Redirect.
Phill Healey

394

En mis controles de usuario, después de actualizar los datos, hago:

  Response.Redirect(Request.RawUrl);    

Eso asegura que la página se vuelva a cargar, y funciona bien desde un control de usuario. Utiliza RawURL y no Request.Url.AbsoluteUripara conservar ningún parámetro GET que pueda incluirse en la solicitud.

Probablemente no desee usar: __doPostBackdado que muchas páginas aspx se comportan de manera diferente al hacer una devolución de datos.


44
@chris, ¿utilizarías un segundo parámetro como Response.Redirect (Request.RawUrl, false)? Aparentemente, es la mejor práctica cuando se usa reponse.redirect. ¿Qué piensas?
aleafonso

@aleafonso: nunca he usado personalmente el segundo parámetro y nunca he tenido ningún problema como consecuencia, por lo que no estoy seguro de qué te compra. Pero sí, de acuerdo con la documentación, debería usar un segundo parámetro, pero solo si va a llamar a CompleteRequest, algo con lo que nunca me he molestado.
Chris

A veces puede necesitar AbsoluteUri, cuando la página actual tiene un parámetro Id (como un questionId aquí en stackoverflow). ¿O estoy equivocado?
CularBytes

2
@aleafonso tiene razón: a menos que necesite detener todo el procesamiento en la página, lo que a veces indica una planificación de diseño deficiente, debe pasar un falso como el segundo parámetro. No pasar el segundo parámetro, o pasar verdadero, arroja una HttpException y puede afectar el rendimiento y llenar los registros de eventos.
Ripside

45

Puede que sea tarde, pero espero que ayude a alguien que está buscando la respuesta.

Puede usar la siguiente línea para hacer eso:

Server.TransferRequest(Request.Url.AbsolutePath, false);

Trate de evitar el uso, Response.Redirectya que aumenta los pasos en el proceso. Lo que realmente hace es:

  1. Devuelve la página con el encabezado de redirección
  2. El navegador redirige a la URL de destino.

Como puede ver, el mismo resultado toma 2 viajes en lugar de 1 viaje.


2
+1 por señalar que Server.Transfer () es una forma más eficiente que Response.Redirect ()
Jenny O'Reilly

Esto funcionó en casos donde Response.Redirect no funcionó correctamente.
Ed Bayiates

He descubierto que esto no borra el estado de las páginas, por ejemplo, el conjunto .Texten a TextBoxo el .Visibleestado de a Button.
Nube

38

Prueba esto:

Response.Redirect(Request.Url.AbsoluteUri);

1
Se acaba de enviar una página de redirección en lugar de la página, haciendo un bucle que el navegador se detendrá cuando se ve que no siempre va a tener una verdadera página ...
Guffa

2
@Guffa que depende totalmente del contexto en el que se utiliza la redirección. Si se usa en un bloque de acción / código que se llama específicamente en función de una acción o condición, entonces solo se disparará una vez cada iteración y si se codifica correctamente de forma aislada.
Phill Healey

Esto puede provocar la pérdida de datos de sesión después de la redirección. Hay algo en las URL totalmente calificadas que arruinan las sesiones.
Chris Cudmore


8

Hay varios métodos para actualizar la página en asp.net como ...

Java Script

 function reloadPage()
 {
     window.location.reload()
 }

Código detrás

Response.Redirect(Request.RawUrl)

Metaetiqueta

<meta http-equiv="refresh" content="600"></meta>

Redirección de página

Response.Redirect("~/default.aspx"); // Or whatever your page url

6

Si no desea realizar una actualización completa de la página, ¿qué le parece envolver lo que desea actualizar dentro de un UpdatePanel y luego hacer una devolución de datos asincrónica?


3

Personalmente, debo asegurarme de que la página mantenga el estado, de modo que todos los cuadros de texto y otros campos de entrada conserven sus valores. Al hacer una meta actualización, es como una nueva publicación, IsPostBack siempre es falso, por lo que todos sus controles están en el estado inicializado nuevamente. Para retener el estado, coloque esto al final de su Page_Load (). cree un botón oculto en la página con un evento conectado, algo así como butRefresh con evento butRefresh_Click (...). Este código establece un temporizador en la página para activar una devolución de datos al igual que un usuario hizo clic en el botón Actualizar. Todo el estado y la sesión se conserva. ¡Disfrutar! (PD: es posible que deba colocar la directiva en el encabezado @Page EnableEventValidation = "false" si recibe un error en la devolución de datos.

//tell the browser to post back again in 5 seconds while keeping state of all controls
ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "<script>setTimeout(function(){ " + ClientScript.GetPostBackClientHyperlink(butRefresh, "refresh") + " },5000);</script>");

2

No puedes hacer eso. Si utiliza una redirección (o cualquier otra técnica de servidor), nunca enviará la página real al navegador, solo las páginas de redirección.

Tiene que usar una metaetiqueta o JavaScript para hacer esto, de modo que pueda volver a cargar la página después de que se haya mostrado por un tiempo:

ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',5000);", true);

2

En su page_load, agregue esto:

Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;

1
Response.Write("<script>window.opener.location.href = window.opener.location.href </script>");

1

Puede usar 2 formas para resolver este problema: 1) Después de la etiqueta de la cabeza

<head> 
<meta http-equiv="refresh" content="600">
</head>

2) Si su página no tiene etiqueta de encabezado, debe usar Javascript para implementar

<script type="text/javascript">
  function RefreshPage()
  {
    window.location.reload()
  }
</script>

Mi contacto:

http://gola.vn


1

La única forma correcta de actualizar la página fue a través de JavaScript, muchas de las principales respuestas de .NET fallaron.

Response.Write("<script type='text/javascript'> setTimeout('location.reload(true); ', timeout);</script>");

Coloque el código anterior en el evento de clic de botón o en cualquier lugar donde desee forzar la actualización de la página.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.