Jak odświeżyć stronę w ASP.NET? (Pozwól mu przeładować się przez kod)
158
Jak odświeżyć stronę w ASP.NET? (Pozwól mu przeładować się przez kod)
Wolałbym nie używać Response.Redirect (), ponieważ nie wiem, czy strona, na której się znajdę, znajduje się w kontrolce użytkownika wewnątrz webpartu w sharepoint.
Zobacz odpowiedź od @gaurav poniżej, aby dowiedzieć się, jak to zrobić w .NET przy użyciu Server.TransferRequest.
sfarbota
Może to być poprawne w przypadku strony, która nie korzysta ze wsparcia po stronie serwera, jednak jest błędne w stosunku do określonego .Net. Poprawnym sposobem jest użycie Response.Redirect.
Phill Healey
394
W moich kontrolkach użytkowników po aktualizacji danych robię:
Response.Redirect(Request.RawUrl);
Zapewnia to ponowne załadowanie strony i działa dobrze z poziomu kontroli użytkownika. Używasz RawURL i nie Request.Url.AbsoluteUrizachowujesz żadnych parametrów GET, które mogą być zawarte w żądaniu.
Prawdopodobnie nie chcesz używać __doPostBack:, ponieważ wiele stron aspx zachowuje się inaczej podczas ogłaszania zwrotnego.
@chris czy użyłbyś drugiego parametru jako Response.Redirect (Request.RawUrl, false)? Najwyraźniej jest to najlepsza praktyka podczas korzystania z reponse.redirect. Co myślisz?
aleafonso
@aleafonso: Nigdy osobiście nie korzystałem z drugiego parametru i nigdy nie miałem żadnych problemów z tego powodu, więc nie jestem pewien, co to kupuje. Ale tak, zgodnie z dokumentacją, powinieneś używać drugiego parametru, ale tylko wtedy, gdy zamierzasz wywołać CompleteRequest - z czym nigdy się nie przejmowałem.
chris
Czasami możesz potrzebować AbsoluteUri, gdy bieżąca strona ma parametr Id (jak na przykład questionId w stackoverflow). A może się mylę?
CularBytes
2
@aleafonso ma rację - chyba że musisz zatrzymać całe przetwarzanie na stronie, co czasami wskazuje na słabe planowanie projektu, jako drugi parametr należy podać fałsz. Nieprzekazanie drugiego parametru lub przekazanie wartości true powoduje zgłoszenie HttpException i może wpłynąć na wydajność i wypełnić dzienniki zdarzeń.
Ripside
45
To może być późno, ale mam nadzieję, że pomoże to komuś, kto szuka odpowiedzi.
W tym celu możesz skorzystać z następującego wiersza:
To po prostu wysłać stronę przekierowania zamiast strony, powodując pętlę, która przeglądarka zatrzyma się, gdy widzi, że nigdy nie będzie się prawdziwy stronę ...
Guffa
2
@Guffa, która zależy całkowicie od kontekstu, w którym jest używane przekierowanie. Jeśli jest używany w bloku akcji / kodu, który jest specjalnie wywoływany na podstawie akcji lub warunku, będzie uruchamiany tylko raz na każdą iterację i jeśli zostanie poprawnie zakodowany w izolacji.
Phill Healey
Może to spowodować utratę danych sesji po przekierowaniu. Jest coś w pełni kwalifikowanych adresów URL, które psują sesje.
Jeśli nie chcesz wykonywać pełnego odświeżania strony, to co powiesz na zawijanie tego, co chcesz odświeżyć w UpdatePanel, a następnie wykonanie asynchronicznego ogłaszania zwrotnego?
Osobiście muszę upewnić się, że strona zachowuje stan, aby wszystkie pola tekstowe i inne pola wejściowe zachowały swoje wartości. wykonując odświeżanie meta, jest jak nowy wpis, IsPostBack jest zawsze fałszywy, więc wszystkie kontrolki są ponownie w stanie zainicjowanym. Aby zachować stan, umieść to na końcu swojej Page_Load (). utwórz ukryty przycisk na stronie z podłączonym zdarzeniem, coś w rodzaju butRefresh ze zdarzeniem butRefresh_Click (...). Ten kod ustawia licznik czasu na stronie, aby uruchomić ogłaszanie zwrotne, tak jak użytkownik sam kliknął przycisk odświeżania. cały stan i sesja są zachowane. Cieszyć się! (PS, może być konieczne umieszczenie dyrektywy w nagłówku @Page EnableEventValidation = "false", jeśli pojawi się błąd podczas ogłaszania zwrotnego.
//tell the browser to post back again in 5 seconds while keeping state of all controlsClientScript.RegisterClientScriptBlock(this.GetType(),"refresh","<script>setTimeout(function(){ "+ClientScript.GetPostBackClientHyperlink(butRefresh,"refresh")+" },5000);</script>");
Nie możesz tego zrobić. Jeśli używasz przekierowania (lub jakiejkolwiek innej techniki serwera), nigdy nie wyślesz rzeczywistej strony do przeglądarki, a jedynie strony przekierowujące.
Aby to zrobić, musisz użyć metatagu lub JavaScript, aby móc ponownie załadować stronę po jej wyświetleniu przez jakiś czas:
Odpowiedzi:
Po wyrenderowaniu strony do klienta masz tylko dwa sposoby wymuszenia odświeżenia. Jednym z nich jest Javascript
Drugi to metatag:
Możesz ustawić interwały odświeżania po stronie serwera.
źródło
Server.TransferRequest
.W moich kontrolkach użytkowników po aktualizacji danych robię:
Zapewnia to ponowne załadowanie strony i działa dobrze z poziomu kontroli użytkownika. Używasz RawURL i nie
Request.Url.AbsoluteUri
zachowujesz żadnych parametrów GET, które mogą być zawarte w żądaniu.Prawdopodobnie nie chcesz używać
__doPostBack
:, ponieważ wiele stron aspx zachowuje się inaczej podczas ogłaszania zwrotnego.źródło
To może być późno, ale mam nadzieję, że pomoże to komuś, kto szuka odpowiedzi.
W tym celu możesz skorzystać z następującego wiersza:
Staraj się unikać używania,
Response.Redirect
ponieważ zwiększa to liczbę etapów procesu. W rzeczywistości to:Jak widać, ten sam wynik dotyczy 2 podróży, a nie 1 podróży.
źródło
.Text
w aTextBox
lub.Visible
statusButton
.Spróbuj tego:
źródło
Użyj metody location.reload () z javascript .
źródło
Istnieją różne metody odświeżania strony w asp.net, takie jak ...
Skrypt Java
Kod za
Meta Tag
Przekierowanie strony
źródło
Jeśli nie chcesz wykonywać pełnego odświeżania strony, to co powiesz na zawijanie tego, co chcesz odświeżyć w UpdatePanel, a następnie wykonanie asynchronicznego ogłaszania zwrotnego?
źródło
Osobiście muszę upewnić się, że strona zachowuje stan, aby wszystkie pola tekstowe i inne pola wejściowe zachowały swoje wartości. wykonując odświeżanie meta, jest jak nowy wpis, IsPostBack jest zawsze fałszywy, więc wszystkie kontrolki są ponownie w stanie zainicjowanym. Aby zachować stan, umieść to na końcu swojej Page_Load (). utwórz ukryty przycisk na stronie z podłączonym zdarzeniem, coś w rodzaju butRefresh ze zdarzeniem butRefresh_Click (...). Ten kod ustawia licznik czasu na stronie, aby uruchomić ogłaszanie zwrotne, tak jak użytkownik sam kliknął przycisk odświeżania. cały stan i sesja są zachowane. Cieszyć się! (PS, może być konieczne umieszczenie dyrektywy w nagłówku @Page EnableEventValidation = "false", jeśli pojawi się błąd podczas ogłaszania zwrotnego.
źródło
Nie możesz tego zrobić. Jeśli używasz przekierowania (lub jakiejkolwiek innej techniki serwera), nigdy nie wyślesz rzeczywistej strony do przeglądarki, a jedynie strony przekierowujące.
Aby to zrobić, musisz użyć metatagu lub JavaScript, aby móc ponownie załadować stronę po jej wyświetleniu przez jakiś czas:
źródło
W swoim
page_load
dodaj to:źródło
źródło
Możesz skorzystać z 2 sposobów rozwiązania tego problemu: 1) Po tagu head
2) Jeśli Twoja strona nie ma tagu head, do zaimplementowania musisz użyć Javascript
Mój kontakt:
http://gola.vn
źródło
Jedynym poprawnym sposobem odświeżenia strony było użycie JavaScript, wiele z najlepszych odpowiedzi .NET zawiodło.
Umieść powyższy kod w zdarzeniu kliknięcia przycisku lub w dowolnym miejscu, w którym chcesz wymusić odświeżenie strony.
źródło