ASP.NET'te sayfayı nasıl yenileyebilirim? (Kod ile kendini yeniden yükle)


158

ASP.NET'te bir sayfayı nasıl yenileyebilirim? (Kod ile kendini yeniden yükle)

Response.Redirect () kullanmamayı tercih ederim, çünkü paylaşım noktası içindeki bir web bölümünün içindeki bir kullanıcı kontrolünün içinde olduğu için sayfanın üzerinde olup olmayacağını bilmiyorum.


2
Ben OP değilim, ancak bir nedeni javascript devre dışı bırakılabilir
Nathan Koop

11
ASP.NET javascript dayanır, bu yüzden bir kullanıcı javascript devre dışı bırakılırsa daha büyük bir sorun var ...
jrummell

Yanıtlar:


45

Sayfa müşteriye sunulduktan sonra, yenilemeyi zorlamanın yalnızca iki yolu vardır. Biri Javascript

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

İkincisi bir Meta etiketidir:

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

Yenileme aralıklarını sunucu tarafında ayarlayabilirsiniz.


setTimeout'u nereye koymalıyım?
Siti

.NET kullanarak bunu yapmanın iyi bir yolu için lütfen aşağıdaki @gaurav yanıtını inceleyin Server.TransferRequest.
sfarbota

Bu, Sunucu Tarafı desteği kullanmayan bir sayfa için doğru olabilir, ancak belirtilen .Net ile ilgili yanlıştır. Doğru yol Response.Redirect kullanmaktır.
Phill Healey

394

Kullanıcı denetimlerimde, verileri güncelledikten sonra şunları yaparım:

  Response.Redirect(Request.RawUrl);    

Bu, sayfanın yeniden yüklenmesini sağlar ve bir kullanıcı denetiminden iyi çalışır. RawURL kullanırsınız ve Request.Url.AbsoluteUriisteğe dahil olabilecek GET parametrelerini korumazsınız .

Muhtemelen kullanmak istemezsiniz: __doPostBackçünkü birçok aspx sayfası geri gönderme yaparken farklı davranır.


4
@chris Response.Redirect (Request.RawUrl, false) olarak ikinci bir parametre kullanır mısınız? Görünüşe göre, reponse.redirect kullanırken en iyi uygulamadır. Ne düşünüyorsun?
aleafonso

@aleafonso: Hiçbir zaman ikinci parametreyi hiç kullanmadım ve sonuç olarak hiçbir sorun yaşamadım, bu yüzden size ne aldığından emin değilim. Ancak evet, belgelere göre, ikinci bir parametre kullanmalısınız, ancak sadece hiç rahatsız etmediğim CompleteRequest'i arayacaksanız.
chris

Bazen geçerli sayfada bir Id parametresi varsa (burada stackoverflow'daki bir questionId gibi) AbsoluteUri'ye ihtiyacınız olabilir. Yoksa yanılıyor muyum?
CularBytes

2
@aleafonso haklı - bazen kötü tasarım planlamasının göstergesi olan sayfadaki tüm işlemleri durdurmanız gerekmedikçe, ikinci parametre olarak yanlış iletmelisiniz. 2. parametreyi geçmemek veya doğru iletmemek, bir HttpException oluşturur ve performansı etkileyebilir ve olay günlüklerini doldurabilir.
Ripside

45

Bu geç olabilir, ama umarım cevabı arayan birine yardımcı olur.

Bunu yapmak için aşağıdaki satırı kullanabilirsiniz:

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

Süreçteki Response.Redirectadımları arttırdığı için kullanmaktan kaçının . Aslında yaptığı şey:

  1. Yönlendirme üstbilgisiyle sayfayı geri gönderir
  2. Tarayıcı hedef URL'ye yönlendirir.

Gördüğünüz gibi, aynı sonuç 1 yolculuk yerine 2 yolculuk alıyor.


2
Server.Transfer () işlevinin Response.Redirect () yönteminden daha etkili bir yol olduğunu belirten +1
Jenny O'Reilly

Bu Response.Redirect'in düzgün çalışmadığı durumlarda işe yaradı.
Ed Bayiates,

Bu set örneğin, sayfaların durumunu silmiyor saptadık .Textbir de TextBoxya .Visiblebir durumunu Button.
Cloud

38

Bunu dene:

Response.Redirect(Request.Url.AbsoluteUri);

1
Sadece sayfa yerine bir yönlendirme sayfası göndererek, tarayıcının gerçek bir sayfa elde edemeyeceğini gördüğünde duracağı bir döngüye neden olur ...
Guffa

2
@Guffa tamamen yönlendirmenin kullanıldığı bağlama bağlıdır. Bir eylem veya koda dayalı olarak özel olarak adlandırılan bir eylem / kod bloğunda kullanılırsa, her yinelemede bir kez ve ayrı olarak doğru şekilde kodlanırsa ateşlenir.
Phill Healey

Bu, yeniden yönlendirmeden sonra oturum verilerinin kaybolmasına neden olabilir. Tam nitelikli URL'lerde oturumları bozan bir şey var.
Chris Cudmore

13

Javascript'in location.reload () yöntemini kullanın .

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

8

Asp.net gibi sayfayı yenilemek için çeşitli yöntem vardır ...

Java Komut Dosyası

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

Arkasındaki Kod

Response.Redirect(Request.RawUrl)

Meta Etiket

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

Sayfa Yönlendirme

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

6

Tam sayfa yenilemesi yapmak istemiyorsanız, bir UpdatePanel içinde yenilemek istediğiniz şeyi kaydırmaya ve ardından eşzamansız bir geri gönderme yapmaya ne dersiniz?


3

Şahsen, sayfanın durumunun korunmasını sağlamam gerekiyor, böylece tüm metin kutuları ve diğer giriş alanları değerlerini koruyor. meta yenileme yaparak yeni bir gönderi gibi, IsPostBack her zaman yanlıştır, böylece tüm denetimleriniz yeniden başlatılmış durumdadır. Durumu korumak için bunu Page_Load () yönteminin sonuna koyun. sayfada bir olay bağlandığında, ancak olayla butRefresh butRefresh_Click (...) gibi gizli bir düğme oluşturun. Bu kod, tıpkı bir kullanıcının yenileme düğmesini kendileri tıklaması gibi sayfadaki bir zamanlayıcıyı tetikleyecek şekilde bir zamanlayıcı ayarlar. tüm durum ve oturum korunur. Zevk almak! (Not: Geri gönderme işleminde bir hata alırsanız, yönergeyi @Page başlığına EnableEventValidation = "false" olarak koymanız gerekebilir.

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

Bunu yapamazsın. Bir yönlendirme (veya başka bir sunucu tekniği) kullanırsanız, gerçek sayfayı hiçbir zaman tarayıcıya göndermezsiniz, yalnızca yönlendirme sayfalarını gönderirsiniz.

Bunu yapmak için bir meta etiket veya JavaScript kullanmanız gerekir, böylece sayfayı bir süre görüntülendikten sonra yeniden yükleyebilirsiniz:

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

2

Buna şunu page_loadekleyin:

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

Bu sorunu çözmek için 2 yol kullanabilirsiniz: 1) Kafa etiketinden sonra

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

2) Sayfanızda başlık etiketi yoksa, uygulamak için Javascript kullanmanız gerekir

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

İletişim:

http://gola.vn


1

Sayfa yenileme yapabilmemin tek doğru yolu JavaScript'ti, en iyi .NET yanıtlarının çoğu benim için başarısız oldu.

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

Yukarıdaki kodu düğme tıklama etkinliğine veya sayfanın yenilenmesini zorlamak istediğiniz herhangi bir yere yerleştirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.