2010-03-12 22 views
5

Używam Asp.net 2.0. Robię server.transfer od strony 1 do strony 2. Adres URL pozostaje na stronie 1. Teraz klikam łącze na stronie 2, które przeniesie mnie na stronę 3. Adres URL powinien pozostać na stronie 1. Zamiast tego przeglądarka wyświetla teraz adres URL strona 2. Czy to oczekiwane zachowanie?Server.transfer zmiana adresu URL po raz drugi

Próbowałem ukryć parametry z adresu URL.

  1. Nie mogę użyć response.redirect, ponieważ nie mogę uzyskać dostępu do poprzedniej strony z tego miejsca.
  2. Próbowałem używać PostBackUrl, ale to nie zadziała, ponieważ muszę zapisać dane na bieżącej stronie, a następnie pokazać następną stronę, jeśli nie wystąpiły błędy. Jeśli dane były nieprawidłowe i/lub wystąpiły błędy, muszę pokazać użytkownikowi tę samą stronę.
  3. Teraz pomyślałem, aby spróbować server.transfer, ale to pokazuje adres URL poprzedniej strony.

Czy ktoś może wskazać mi właściwy kierunek?

+0

Skończyło się na używaniu sesji i to rozwiązało problem dla mnie. Ale nadal chciałbym wiedzieć, jakie jest rozwiązanie tego problemu. –

Odpowiedz

1

Jest to oczekiwane zachowanie.

Podczas korzystania z usługi Server.Transfer program ASP.NET przerwie przetwarzanie pierwotnego żądania za pomocą ThreadAbortException, a następnie natychmiast, w tym samym wątku, rozpocznie przetwarzanie nowego żądania. Nowe żądanie działa i wysyła dane wyjściowe do przeglądarki. Przeglądarka nie wie nic o Server.Transfer. Cała przeglądarka wie o tym, że zażądała strony1, a serwer odesłał jej trochę treści, co, jak twierdzi programista, pochodzi ze strony2.

Ogłaszanie zwrotne to miejsce, w którym wyskakuje adres URL strony2, jeśli ma być ukryty. Aby treść strony była przetwarzana odświeżenie, musi oddzwonić do strony2. Jeśli odeśle z powrotem na stronę1, strona 1 nie będzie wiedziała, co zrobić z zdarzeniami stanu widoku i formularza, ponieważ są one faktycznie generowane przez stronę2. Aby to osiągnąć, element <form> obsługiwany przez stronę 2 ma action z page2. Spójrz na swojego źródła html w przeglądarce po Server.Transfer, zobaczysz to:

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm"> 

użyciu tradycyjnych webforms, jedynym sposobem, aby całkowicie ukryć adres URL z użytkownikiem byłoby nie skorzystać postbacks i mają wszystko linki na stronie 2 faktycznie prowadzą z powrotem do strony 1 i dodają całą logikę do strony 1, aby odpowiednio się z nią obchodzić.

Alternatywnie, nie można w ogóle używać postbacków. Jeśli zrobiłeś wszystkie akcje za pomocą ajax, to w ogóle nie byłoby zmian adresu URL przeglądarki, a ty i tak będziesz w stanie uzyskać lepsze wrażenia dla użytkownika.

Jeszcze lepiej byłoby użyć ASP.NET MVC, który popycha Cię do przyjaznych URLów podobnych do REST, które są bardzo łatwe do zrozumienia dla użytkownika i które możesz wewnętrznie odwzorować na bardziej złożone parametry.

Powiązane problemy