Comment actualiser la page dans ASP.NET? (Laissez-le se recharger par code)

158

Comment actualiser une page dans ASP.NET? (Laissez-le se recharger par code)

Je préfère ne pas utiliser Response.Redirect () parce que je ne sais pas si la page sur laquelle je serai, car elle se trouve dans un contrôle utilisateur à l'intérieur d'un composant Webpart à l'intérieur de sharepoint.

Ahmad Farid
la source
2
Je ne suis pas OP, mais une raison peut être que javascript peut être désactivé
Nathan Koop
11
ASP.NET s'appuie sur javascript, donc si un utilisateur a désactivé javascript, il y a un problème plus grave ...
jrummell

Réponses:

45

Une fois la page rendue au client, vous n'avez que deux façons de forcer une actualisation. L'un est Javascript

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

La seconde est une balise Meta:

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

Vous pouvez définir les intervalles d'actualisation côté serveur.

Ariel Popovsky
la source
où dois-je mettre le setTimeout?
Siti le
Veuillez consulter la réponse de @gaurav ci-dessous pour un bon moyen de le faire dans .NET en utilisant Server.TransferRequest.
sfarbota
Cela peut être correct pour une page n'utilisant pas la prise en charge côté serveur, mais il est erroné par rapport au .Net spécifié. La manière correcte est d'utiliser Response.Redirect.
Phill Healey
394

Dans mes contrôles utilisateur, après la mise à jour des données, je fais:

  Response.Redirect(Request.RawUrl);    

Cela garantit que la page est rechargée et qu'elle fonctionne correctement à partir d'un contrôle utilisateur. Vous utilisez RawURL et ne Request.Url.AbsoluteUripréservez aucun paramètre GET pouvant être inclus dans la demande.

Vous ne voudrez probablement pas utiliser __doPostBack:, puisque de nombreuses pages aspx se comportent différemment lors d'une publication.

Chris
la source
4
@chris utiliseriez-vous un deuxième paramètre comme Response.Redirect (Request.RawUrl, false)? Apparemment, c'est la meilleure pratique lors de l'utilisation de reponse.redirect. Qu'est-ce que tu penses?
aleafonso
@aleafonso: Je n'ai jamais personnellement utilisé le 2ème paramètre, et je n'ai jamais eu de problèmes en conséquence, donc je ne suis pas sûr de ce qu'il vous achète. Mais oui, selon la documentation, vous devriez utiliser un 2ème paramètre, mais seulement si vous allez appeler CompleteRequest - avec lequel je ne me suis jamais soucié.
chris
Parfois, vous pourriez avoir besoin d'AbsoluteUri, lorsque la page actuelle a un paramètre Id (comme un questionId ici sur stackoverflow). Ou ai-je tort?
CularBytes
2
@aleafonso a raison - à moins que vous n'ayez besoin d'arrêter tout le traitement sur la page, ce qui indique parfois une mauvaise planification de la conception, vous devez passer un faux comme deuxième paramètre. Le fait de ne pas passer le 2ème paramètre ou de transmettre true lève une exception HttpException et peut avoir un impact sur les performances et remplir les journaux d'événements.
Ripside
45

C'est peut-être tard, mais j'espère que cela aidera quelqu'un qui cherche la réponse.

Vous pouvez utiliser la ligne suivante pour ce faire:

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

Essayez d'éviter d'utiliser Response.Redirectcar cela augmente les étapes du processus. Ce qu'il fait réellement est:

  1. Renvoie la page avec l'en-tête de redirection
  2. Le navigateur redirige vers l'URL de destination.

Comme vous pouvez le voir, le même résultat prend 2 voyages plutôt qu'un voyage.

Dicemaster
la source
2
+1 pour avoir souligné que Server.Transfer () est un moyen plus efficace que Response.Redirect ()
Jenny O'Reilly
Cela fonctionnait dans les cas où Response.Redirect ne fonctionnait pas correctement.
Ed Bayiates
J'ai trouvé que cela n'efface pas l'état des pages, par exemple l'ensemble .Textdans a TextBoxou l' .Visibleétat de a Button.
Cloud le
38

Essaye ça:

Response.Redirect(Request.Url.AbsoluteUri);
Andrew Hare
la source
1
Il enverra simplement une page de redirection au lieu de la page, provoquant une boucle que le navigateur arrêtera quand il verra qu'il n'obtiendra jamais une vraie page ...
Guffa
2
@Guffa qui dépend entièrement du contexte dans lequel la redirection est utilisée. S'il est utilisé dans un bloc d'action / code spécifiquement appelé en fonction d'une action ou d'une condition, il ne se déclenchera qu'une fois à chaque itération et s'il est correctement codé de manière isolée.
Phill Healey
Cela peut entraîner une perte de données de session après la redirection. Il y a quelque chose dans les URL entièrement qualifiées qui gâche les sessions.
Chris Cudmore
13

Utilisez la méthode location.reload () de javascript .

<script type="text/javascript">
  function reloadPage()
  {
    window.location.reload()
  }
</script>
jrummell
la source
8

Il existe différentes méthodes pour actualiser la page dans asp.net comme ...

Script Java

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

Code derrière

Response.Redirect(Request.RawUrl)

Balise Meta

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

Redirection de page

Response.Redirect("~/default.aspx"); // Or whatever your page url
Sunil Acharya
la source
6

Si vous ne souhaitez pas effectuer une actualisation complète de la page, que diriez-vous d'encapsuler ce que vous souhaitez actualiser dans un UpdatePanel, puis de faire une publication asynchrone?

Bryan Denny
la source
3

Je dois personnellement m'assurer que la page conserve son état, de sorte que toutes les zones de texte et autres champs de saisie conservent leurs valeurs. en faisant un méta-rafraîchissement, c'est comme un nouveau message, IsPostBack est toujours faux donc tous vos contrôles sont à nouveau dans l'état initialisé. Pour conserver l'état, placez ceci à la fin de votre Page Load (). créer un bouton caché sur la page avec un événement connecté, quelque chose comme butRefresh avec l'événement butRefresh_Click (...). Ce code définit une minuterie sur la page pour déclencher une publication, tout comme un utilisateur a cliqué sur le bouton d'actualisation lui-même. tout l'état et la session sont conservés. Prendre plaisir! (PS, vous devrez peut-être mettre la directive dans l'en-tête @Page EnableEventValidation = "false" si vous recevez une erreur lors de la publication.

//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>");
JJ_Coder4Hire
la source
2

Vous ne pouvez pas faire ça. Si vous utilisez une redirection (ou toute autre technique de serveur), vous n'enverrez jamais la page réelle au navigateur, uniquement les pages de redirection.

Vous devez soit utiliser une balise Meta ou JavaScript pour ce faire, afin de pouvoir recharger la page après qu'elle a été affichée pendant un certain temps:

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

Dans votre page_load, ajoutez ceci:

Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;
sjehutch
la source
1
Response.Write("<script>window.opener.location.href = window.opener.location.href </script>");
farhana
la source
1

Vous pouvez utiliser 2 méthodes pour résoudre ce problème: 1) Après la balise head

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

2) Si votre page n'a pas de balise head, vous devez utiliser Javascript pour implémenter

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

Mon contact:

http://gola.vn

À M
la source
1

La seule façon correcte d'actualiser la page était via JavaScript, la plupart des principales réponses .NET ont échoué pour moi.

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

Mettez le code ci-dessus dans l'événement de clic de bouton ou à tout endroit où vous souhaitez forcer l'actualisation de la page.

Hammad Khan
la source