169 votes

Comment actualiser la page en ASP.NET? (Laissez-la se recharger grâce au code)

Comment actualiser une page en ASP.NET? (Permettez-lui de se recharger par du code)

Je préférerais ne pas utiliser Response.Redirect() car je ne sais pas sur quelle page je serai, car c'est à l'intérieur d'un contrôle utilisateur à l'intérieur d'une partie web à l'intérieur de SharePoint.

3 votes

Je ne suis pas l'auteur du message initial, mais une raison possible est que le javascript peut être désactivé.

12 votes

ASP.NET repose sur javascript, donc si un utilisateur a désactivé javascript, il y a un plus gros problème ...

419voto

chris Points 10694

Dans mes contrôles utilisateur, après avoir mis à jour les données, je fais :

  Response.Redirect(Request.RawUrl);    

Cela garantit que la page est rechargée, et cela fonctionne bien à partir d'un contrôle utilisateur. Vous utilisez RawURL et non Request.Url.AbsoluteUri pour conserver les éventuels paramètres GET qui peuvent être inclus dans la requête.

Vous ne voulez probablement pas utiliser : __doPostBack, car de nombreuses pages aspx se comportent différemment lors d'un postback.

4 votes

@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 Response.Redirect. Qu'en pensez-vous ?

0 votes

@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 que cela vous apporte. Mais oui, selon la documentation, vous devriez utiliser un 2ème paramètre, mais seulement si vous allez appeler CompleteRequest - ce à quoi je n'ai jamais prêté attention.

1 votes

Parfois, vous pourriez avoir besoin de AbsoluteUri, lorsque la page actuelle a un paramètre Id (comme un questionId ici sur stackoverflow). Ou je me trompe?

53voto

gaurav Points 511

Cela peut être tardif, 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.Redirect car cela augmente les étapes du processus. Ce que cela fait en réalité est le suivant:

  1. Il 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 nécessite 2 trajets au lieu d'un.

3 votes

+1 pour avoir souligné que Server.Transfer() est une méthode plus efficace que Response.Redirect()

0 votes

Cela a fonctionné dans les cas où Response.Redirect ne fonctionnait pas correctement.

0 votes

J'ai trouvé que cela ne nettoie pas l'état des pages, par exemple l'ensemble .Text dans un TextBox ou l'état .Visible d'un Button.

47voto

Ariel Popovsky Points 3088

Une fois que la page est affichée sur le client, vous n'avez que deux façons d'forcer un rafraîchissement. L'un est Javascript

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

Le deuxième est une balise Meta :

Vous pouvez définir les intervalles de rafraîchissement côté serveur.

0 votes

Où devrais-je mettre setTimeout?

0 votes

Veuillez consulter la réponse de @gaurav ci-dessous pour une bonne façon de le faire en .NET en utilisant Server.TransferRequest.

0 votes

Cela peut être correct pour une page n'utilisant pas de support côté serveur, cependant cela est incorrect par rapport à .Net spécifié. La bonne manière est d'utiliser Response.Redirect.

41voto

Andrew Hare Points 159332

Essayer ceci :

Response.Redirect(Request.Url.AbsoluteUri);

1 votes

Il enverra simplement une page de redirection au lieu de la page, provoquant une boucle que le navigateur arrêtera lorsqu'il verra qu'il ne recevra jamais une vraie page...

2 votes

@Guffa cela dépend entièrement du contexte dans lequel la redirection est utilisée. Si elle est utilisée dans un bloc d'action / de code qui est spécifiquement appelé en fonction d'une action ou d'une condition, elle ne se déclenchera qu'une fois à chaque itération et si elle est programmée correctement de manière isolée.

0 votes

Cela peut entraîner une perte de données de session après la redirection. Il y a quelque chose à propos des URL entièrement qualifiées qui perturbe les sessions.

14voto

jrummell Points 23718

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X