Wie aktualisiere ich die Seite in ASP.NET? (Lassen Sie es sich per Code neu laden)

158

Wie aktualisiere ich eine Seite in ASP.NET? (Lassen Sie es sich per Code neu laden)

Ich möchte Response.Redirect () lieber nicht verwenden, da ich nicht weiß, auf welcher Seite ich mich befinde, da sie sich in einem Benutzersteuerelement in einem Webpart in Sharepoint befindet.

Ahmad Farid
quelle
2
Ich bin nicht OP, aber ein Grund kann sein, dass Javascript deaktiviert werden kann
Nathan Koop
11
ASP.NET basiert auf Javascript. Wenn also ein Benutzer Javascript deaktiviert hat, gibt es ein größeres Problem ...
Jrummell

Antworten:

45

Sobald die Seite für den Client gerendert wurde, haben Sie nur zwei Möglichkeiten, eine Aktualisierung zu erzwingen. Eines ist Javascript

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

Das zweite ist ein Meta-Tag:

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

Sie können die Aktualisierungsintervalle auf der Serverseite festlegen.

Ariel Popovsky
quelle
Wo soll ich das setTimeout ablegen?
Siti
In der Antwort von @gaurav unten finden Sie eine gute Möglichkeit, dies in .NET mit zu tun Server.TransferRequest.
Sfarbota
Dies kann für eine Seite korrekt sein, die keine serverseitige Unterstützung verwendet, ist jedoch in Bezug auf das angegebene .Net falsch. Die richtige Methode ist die Verwendung von Response.Redirect.
Phill Healey
394

In meinen Benutzersteuerelementen mache ich nach dem Aktualisieren der Daten Folgendes:

  Response.Redirect(Request.RawUrl);    

Dadurch wird sichergestellt, dass die Seite neu geladen wird und über ein Benutzersteuerelement einwandfrei funktioniert. Sie verwenden RawURL und behalten Request.Url.AbsoluteUrikeine GET-Parameter bei, die möglicherweise in der Anforderung enthalten sind.

Sie möchten wahrscheinlich nicht verwenden __doPostBack:, da sich viele Aspx-Seiten beim Postback anders verhalten.

chris
quelle
4
@chris würden Sie einen zweiten Parameter als Response.Redirect (Request.RawUrl, false) verwenden? Anscheinend ist es die beste Vorgehensweise bei der Verwendung von reponse.redirect. Was denken Sie?
Aleafonso
@aleafonso: Ich habe den 2. Parameter nie persönlich verwendet und hatte in der Folge keine Probleme, daher bin ich mir nicht sicher, was er Ihnen kauft. Aber ja, laut Dokumentation sollten Sie einen zweiten Parameter verwenden, aber nur, wenn Sie CompleteRequest aufrufen - was mich nie gestört hat.
Chris
Manchmal benötigen Sie AbsoluteUri, wenn die aktuelle Seite einen ID-Parameter hat (wie eine questionId hier im Stackoverflow). Oder liege ich falsch?
CularBytes
2
@aleafonso ist richtig - es sei denn, Sie müssen die gesamte Verarbeitung auf der Seite anhalten, was manchmal auf eine schlechte Entwurfsplanung hinweist, sollten Sie als zweiten Parameter ein false übergeben. Wenn Sie den zweiten Parameter nicht übergeben oder true übergeben, wird eine HttpException ausgelöst, die sich auf die Leistung auswirken und Ereignisprotokolle füllen kann.
Ripside
45

Das mag spät sein, aber ich hoffe, es hilft jemandem, der nach der Antwort sucht.

Sie können dazu die folgende Zeile verwenden:

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

Vermeiden Sie die Verwendung, Response.Redirectda dies die Schritte im Prozess erhöht. Was es tatsächlich tut, ist:

  1. Sendet die Seite mit dem Umleitungsheader zurück
  2. Der Browser leitet zur Ziel-URL weiter.

Wie Sie sehen können, dauert das gleiche Ergebnis 2 Fahrten anstatt 1 Fahrt.

Dicemaster
quelle
2
+1 für den Hinweis, dass Server.Transfer () eine effizientere Methode als Response.Redirect () ist
Jenny O'Reilly
Dies funktionierte in Fällen, in denen Response.Redirect nicht ordnungsgemäß funktionierte.
Ed Bayiates
Ich habe festgestellt, dass dies den Status von Seiten nicht löscht, z. B. den Satz .Textin a TextBoxoder den .VisibleStatus von a Button.
Wolke
38

Versuche dies:

Response.Redirect(Request.Url.AbsoluteUri);
Andrew Hare
quelle
1
Es wird nur eine Umleitungsseite anstelle der Seite gesendet, was zu einer Schleife führt, die der Browser stoppt, wenn er sieht, dass er niemals eine echte Seite erhält ...
Guffa
2
@Guffa, das ganz vom Kontext abhängt, in dem die Umleitung verwendet wird. Wenn es in einem Aktions- / Codeblock verwendet wird, der basierend auf einer Aktion oder Bedingung speziell aufgerufen wird, wird es nur einmal pro Iteration ausgelöst und wenn es isoliert korrekt codiert wird.
Phill Healey
Dies kann nach der Umleitung zum Verlust von Sitzungsdaten führen. Vollqualifizierte URLs haben etwas an sich, das Sitzungen durcheinander bringt.
Chris Cudmore
13

Verwenden Sie die location.reload () -Methode von Javascript .

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

Es gibt verschiedene Methoden, um die Seite in asp.net zu aktualisieren, wie ...

Java Script

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

Code dahinter

Response.Redirect(Request.RawUrl)

Meta-Tag

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

Seitenumleitung

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

Wenn Sie keine vollständige Seitenaktualisierung durchführen möchten, können Sie das, was Sie aktualisieren möchten, in ein UpdatePanel einbinden und anschließend ein asynchrones Postback durchführen.

Bryan Denny
quelle
3

Ich persönlich muss sicherstellen, dass die Seite den Status beibehält, damit alle Textfelder und anderen Eingabefelder ihre Werte behalten. Wenn Sie eine Meta-Aktualisierung durchführen, ist dies wie ein neuer Beitrag. IsPostBack ist immer falsch, sodass sich alle Ihre Steuerelemente wieder im initialisierten Zustand befinden. Um den Status beizubehalten, setzen Sie dies am Ende Ihres Page Load (). Erstellen Sie eine versteckte Schaltfläche auf der Seite, an die ein Ereignis angeschlossen ist, z. B. butRefresh mit dem Ereignis butRefresh_Click (...). Dieser Code setzt einen Timer auf der Seite, um ein Postback auszulösen, genau wie ein Benutzer selbst auf die Schaltfläche "Aktualisieren" geklickt hat. Alle Status und Sitzungen bleiben erhalten. Genießen! (PS: Möglicherweise müssen Sie die Direktive in den @ Page-Header EnableEventValidation = "false" einfügen, wenn Sie beim Postback einen Fehler erhalten.

//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
quelle
2

Das kannst du nicht machen. Wenn Sie eine Umleitung (oder eine andere Servertechnik) verwenden, senden Sie niemals die eigentliche Seite an den Browser, sondern nur Umleitungsseiten.

Sie müssen dazu entweder ein Meta-Tag oder JavaScript verwenden, damit Sie die Seite neu laden können, nachdem sie eine Weile angezeigt wurde:

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

Fügen Sie page_loadFolgendes hinzu:

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

Sie können dieses Problem auf zwei Arten lösen: 1) Nach dem Head-Tag

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

2) Wenn Ihre Seite kein Head-Tag hat, müssen Sie zur Implementierung Javascript verwenden

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

Mein Kontakt:

http://gola.vn

Tom
quelle
1

Die einzige korrekte Möglichkeit, eine Seitenaktualisierung durchzuführen, war JavaScript. Viele der wichtigsten .NET-Antworten sind für mich fehlgeschlagen.

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

Fügen Sie den obigen Code in das Ereignis "Schaltfläche klicken" oder an eine beliebige Stelle ein, an der Sie die Seitenaktualisierung erzwingen möchten.

Hammad Khan
quelle