„response.redirect” i „server.transfer” pomaga przenieść użytkownika z jednej strony na drugą podczas wykonywania strony. Ale sposób, w jaki dokonują tego transferu / przekierowania, jest zupełnie inny.
Jeśli jesteś wizualnym facetem i wolisz zobaczyć demonstrację niż teorię, proponuję zobaczyć poniższy film na Facebooku, który wyjaśnia różnicę w bardziej demonstracyjny sposób.
https://www.facebook.com/photo.php?v=762186150488997
Główną różnicą między nimi jest to, kto dokonuje transferu. W „response.redirect” transfer odbywa się w przeglądarce, natomiast w „server.transfer” serwer. Spróbujmy zrozumieć to stwierdzenie w bardziej szczegółowy sposób.
W „Server.Transfer” następująca sekwencja jest następująca:
1. Użytkownik wysyła żądanie do strony ASP.NET. Na poniższym rysunku żądanie jest wysyłane do „WebForm1” i chcielibyśmy przejść do „Webform2”.
2. Serwer rozpoczyna wykonywanie „Webform1” i rozpoczyna się cykl życia strony. Ale przed zakończeniem pełnego cyklu życia strony „Server.transfer” dzieje się z „WebForm2”.
3. Tworzony jest obiekt strony „Webform2”, wykonywany jest pełny cykl życia strony, a następnie wyjściowa odpowiedź HTML jest wysyłana do przeglądarki.
W „Response.Redirect” poniżej znajduje się sekwencja zdarzeń do nawigacji: -
1. Klient (przeglądarka) wysyła żądanie do strony. Na poniższym rysunku żądanie jest wysyłane do „WebForm1” i chcielibyśmy przejść do „Webform2”.
2. Cykl życia „Webform1” zaczyna się uruchamiać. Ale pomiędzy cyklem życia zdarza się „Response.Redirect”.
3. Teraz zamiast przekierowywania serwer wysyła do przeglądarki polecenie HTTP 302. To polecenie informuje przeglądarkę, że musi zainicjować żądanie GET na stronie „Webform2.aspx”.
4.Browser interpretuje polecenie 302 i wysyła żądanie GET dla „Webform2.aspx”.
Innymi słowy „Server.Transfer” jest wykonywany przez serwer, podczas gdy „Response.Redirect” jest wykonywany przez przeglądarkę. „Response.Redirect” wymaga dwóch próśb o przekierowanie strony.
Kiedy więc użyć „Server.Transfer”, a kiedy „Response.Redirect”?
Użyj „Server.Transfer”, jeśli chcesz nawigować po stronach znajdujących się na tym samym serwerze, użyj „Response.Redirect”, jeśli chcesz nawigować między stronami, które znajdują się na innym serwerze i domenie.
Poniżej znajduje się tabela podsumowująca, która przedstawia różnice i w którym scenariuszu zastosować.