Bagaimana cara menyegarkan halaman di ASP.NET? (Biarkan ulang dengan kode)

158

Bagaimana cara me-refresh halaman di ASP.NET? (Biarkan ulang dengan kode)

Saya lebih suka tidak menggunakan Response.Redirect () karena saya tidak tahu apakah halaman saya akan berada, karena itu di dalam kontrol pengguna di dalam webpart di dalam sharepoint.

Ahmad Farid
sumber
2
Saya tidak OP, tetapi salah satu alasan mungkin karena javascript dapat dinonaktifkan
Nathan Koop
11
ASP.NET bergantung pada javascript, jadi jika pengguna memiliki javascript dinonaktifkan ada masalah yang lebih besar ...
jrummell

Jawaban:

45

Setelah halaman diberikan kepada klien, Anda hanya memiliki dua cara untuk memaksa penyegaran. Salah satunya adalah Javascript

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

Yang kedua adalah tag Meta:

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

Anda dapat mengatur interval refresh di sisi server.

Ariel Popovsky
sumber
Di mana saya harus meletakkan setTimeout?
Siti
Silakan lihat jawaban dari @gaurav di bawah ini untuk mengetahui cara yang baik dalam menggunakan .NET ini Server.TransferRequest.
sfarbota
Ini mungkin benar untuk halaman yang tidak menggunakan dukungan Sisi Server, namun itu salah dalam kaitannya dengan. Net yang ditentukan Cara yang benar adalah dengan menggunakan Response.Redirect.
Phill Healey
394

Dalam kontrol pengguna saya, setelah memperbarui data saya lakukan:

  Response.Redirect(Request.RawUrl);    

Itu memastikan bahwa halaman dimuat ulang, dan berfungsi dengan baik dari kontrol pengguna. Anda menggunakan RawURL dan tidak Request.Url.AbsoluteUrimenyimpan parameter GET yang mungkin termasuk dalam permintaan.

Anda mungkin tidak ingin menggunakan __doPostBack:, karena banyak halaman aspx berperilaku berbeda saat melakukan postback.

chris
sumber
4
@chris, apakah Anda akan menggunakan parameter kedua sebagai Response.Redirect (Request.RawUrl, false)? Tampaknya, ini adalah praktik terbaik saat menggunakan reponse.redirect. Bagaimana menurut anda?
aleafonso
@aleafonso: Saya tidak pernah secara pribadi menggunakan parameter ke-2, dan tidak pernah memiliki masalah sebagai konsekuensinya, jadi saya tidak yakin apa yang membeli Anda. Tapi ya, menurut dokumentasi, Anda harus menggunakan parameter ke-2, tetapi hanya jika Anda akan memanggil CompleteRequest - yang tidak pernah saya pedulikan.
chris
Kadang-kadang Anda mungkin membutuhkan AbsoluteUri, ketika halaman saat ini memiliki parameter ID (seperti questionId di sini di stackoverflow). Atau saya salah?
CularBytes
2
@aleafonso benar - kecuali jika Anda harus menghentikan semua pemrosesan pada halaman, yang kadang-kadang menunjukkan perencanaan desain yang buruk, Anda harus memberikan false sebagai param kedua. Tidak melewati param 2, atau lewat true, melempar HttpException dan dapat memengaruhi kinerja dan mengisi log peristiwa.
Ripside
45

Ini mungkin terlambat, tapi saya harap ini membantu seseorang yang mencari jawabannya.

Anda dapat menggunakan baris berikut untuk melakukan itu:

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

Cobalah untuk menghindari penggunaan Response.Redirectkarena meningkatkan langkah-langkah dalam proses. Apa yang sebenarnya dilakukannya adalah:

  1. Mengirim kembali halaman dengan header pengalihan
  2. Browser mengalihkan ke URL tujuan.

Seperti yang Anda lihat, hasil yang sama membutuhkan 2 perjalanan daripada 1 perjalanan.

dicemaster
sumber
2
+1 untuk menunjukkan bahwa Server.Transfer () adalah cara yang lebih efisien daripada Response.Redirect ()
Jenny O'Reilly
Ini bekerja dalam kasus di mana Response.Redirect tidak berfungsi dengan benar.
Ed Bayiates
Saya telah menemukan bahwa ini tidak menghapus keadaan halaman, misalnya set .Textdi a TextBoxatau .Visiblestatus a Button.
Cloud
38

Coba ini:

Response.Redirect(Request.Url.AbsoluteUri);
Andrew Hare
sumber
1
Itu hanya akan mengirim halaman redirection bukan halaman, menyebabkan perulangan bahwa browser akan berhenti ketika melihat bahwa itu tidak akan pernah mendapatkan halaman nyata ...
Guffa
2
@Guffa yang bergantung sepenuhnya pada konteks di mana pengalihan digunakan. Jika itu digunakan dalam blok tindakan / kode yang secara khusus disebut berdasarkan pada tindakan atau kondisi maka hanya akan menyala sekali setiap iterasi dan jika dikodekan dengan benar dalam isolasi.
Phill Healey
Ini dapat mengakibatkan hilangnya data sesi setelah pengalihan. Ada sesuatu tentang url berkualifikasi lengkap yang mengacaukan sesi.
Chris Cudmore
13

Gunakan metode location.reload () javascript .

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

Ada berbagai metode untuk menyegarkan halaman di asp.net seperti ...

Java Script

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

Kode di Balik

Response.Redirect(Request.RawUrl)

Meta Tag

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

Pengalihan Halaman

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

Jika Anda tidak ingin melakukan refresh halaman penuh, lalu bagaimana dengan membungkus apa yang ingin Anda refresh di dalam UpdatePanel dan kemudian melakukan postback asinkron?

Bryan Denny
sumber
3

Saya pribadi perlu memastikan bahwa halaman tersebut tetap berstatus, jadi semua kotak teks dan bidang input lainnya mempertahankan nilainya. dengan melakukan meta refresh itu seperti posting baru, IsPostBack selalu salah sehingga semua kontrol Anda berada dalam keadaan inisialisasi lagi. Untuk mempertahankan status, letakkan ini di akhir Page_Load Anda (). buat tombol tersembunyi di halaman dengan acara yang terhubung, sesuatu seperti butRefresh dengan event butRefresh_Click (...). Kode ini menetapkan timer pada halaman untuk mem-posting kembali seperti pengguna mengklik sendiri tombol refresh. semua status dan sesi dipertahankan. Nikmati! (PS Anda mungkin perlu meletakkan arahan di header @Page EnableEventValidation = "false" jika Anda menerima kesalahan pada postback.

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

Kamu tidak bisa melakukan itu Jika Anda menggunakan pengalihan (atau teknik server lainnya), Anda tidak akan pernah mengirim halaman yang sebenarnya ke browser, hanya halaman pengalihan.

Anda harus menggunakan tag meta atau JavaScript untuk melakukan ini, sehingga Anda dapat memuat ulang halaman setelah ditampilkan untuk sementara waktu:

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

Di Anda page_load, tambahkan ini:

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

Anda dapat menggunakan 2 cara untuk mengatasi masalah ini: 1) Setelah tag kepala

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

2) Jika halaman Anda tidak memiliki tag kepala, Anda harus menggunakan Javascript untuk menerapkan

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

Kontak saya:

http://gola.vn

Tom
sumber
1

Satu-satunya cara yang benar yang bisa saya lakukan menyegarkan halaman adalah melalui JavaScript, banyak jawaban .NET gagal untuk saya.

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

Masukkan kode di atas dalam acara klik tombol atau di mana pun Anda ingin memaksa penyegaran halaman.

Hammad Khan
sumber