2010-03-12 4 views
5

Asp.net 2.0을 사용하고 있습니다. 나는 1 페이지에서 2 페이지까지 server.transfer을합니다. URL은 1 페이지를 유지합니다. 이제 2 페이지의 링크를 클릭하면 3 페이지로 이동합니다. 따라서 URL은 1 페이지로 유지됩니다. 대신 브라우저에 이제 예상되는 행동입니까?Server.transfer URL을 두 번 다시 변경합니다.

실제로 URL에서 매개 변수를 숨기려고했습니다.

  1. 여기에서 이전 페이지에 액세스 할 수 없기 때문에 response.redirect을 사용할 수 없습니다.
  2. PostBackUrl을 사용해 보았지만 현재 페이지에 데이터를 저장하고 오류가 발생하지 않은 경우 다음 페이지를 표시해야하기 때문에 저에게 적합하지 않습니다. 데이터가 올바르지 않거나 오류가있는 경우 사용자에게 동일한 페이지를 표시해야합니다.
  3. 이제 server.transfer를 시도했지만 이전 페이지의 URL이 표시됩니다.

아무도 올바른 방향으로 나를 가리킬 수 있습니까?

+0

나는 세션을 사용하여 끝내고 저를 위해 문제를 해결합니다. 그러나 나는 아직도이 문제에 대한 해결책이 무엇인지 알고 싶습니다. –

답변

1

이것은 예상되는 동작입니다.

Server.Transfer을 사용하면 ASP.NET은 ThreadAbortException을 통해 원래 요청 처리를 중단 한 다음 즉시 동일한 스레드에서 새 요청 처리를 시작합니다. 새 요청이 실행되고 그 결과가 브라우저로 전송됩니다. 브라우저는 Server.Transfer에 대해 아무것도 모릅니다. 모든 브라우저는 페이지 1을 요청했고 서버가 콘텐츠를 다시 보냈다는 것을 알고 있습니다. 실제로 개발자가 아는 바로는 page2에서 온 것입니다.

포스트 백은 페이지 2 URL이 숨겨져있는 경우 누출됩니다. page2 내용이 포스트 백을 처리하려면 페이지 2에 다시 게시해야합니다. page1에 다시 게시하면 page1은 view2에 의해 실제로 생성되므로 viewstate 및 양식 이벤트로 무엇을해야할지 알 수 없습니다. 이를 달성하기 위해 페이지 2에 의해 서비스되는 <form> 요소는 actionpage2입니다. Server.Transfer 후 브라우저에서 HTML 소스 봐, 당신이 볼 수 있습니다 :

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

을 기존의 웹 양식을 사용하여 완전히 사용자로부터 URL을 숨길 수있는 유일한 방법은 포스트 백을 사용하지하는 모든 것 page2의 링크는 실제로 page1에 다시 링크되고 page1에 모든 로직을 추가하여 적절하게 처리합니다.

또는 포스트 백을 전혀 사용할 수 없습니다. ajax를 통해 모든 작업을 수행했다면 브라우저 URL이 전혀 변경되지 않으며 어쨌든 사용자를 위해 더 나은 환경을 제공 할 수 있어야합니다.

ASP.NET MVC를 사용하면 사용자가 쉽게 이해할 수 있고 내부적으로 더 복잡한 매개 변수에 매핑 할 수있는 친숙한 REST와 유사한 URL로 사용자를 유도 할 수 있습니다.