사용자를 다른 페이지로 리디렉션

Visual Studio 2010

업데이트: 2007년 11월

사용자를 웹 응용 프로그램의 다른 페이지로 리디렉션해야 하는 경우가 자주 있습니다. ASP.NET에서는 다음과 같은 방법을 사용하여 웹 페이지로 리디렉션을 빌드할 수 있습니다.

  • 페이지에서 하이퍼링크를 사용합니다.

  • 현재 페이지가 전송된 경우 다른 대상 페이지를 지정할 수 있는 페이지 간 게시를 구성합니다.

  • 브라우저가 다른 페이지를 요청하도록 강제로 지정하여 프로그래밍 방식으로 리디렉션합니다.

  • 동일 웹 응용 프로그램의 다른 페이지로 컨트롤을 전송하여 프로그래밍 방식으로 리디렉션합니다.

다음 항목에서는 각 옵션에 대해 자세히 설명합니다. 이 항목 뒷부분의 표에서는 옵션에 대해 간략히 설명하고 각 옵션의 사용 시기를 결정하는 데 도움이 되는 지침을 제공합니다.

ASP.NET 웹 페이지에서 HTML 앵커 태그(<a>)를 사용하여 정적 링크를 만들거나 HyperLink 컨트롤을 사용하여 하이퍼링크의 링크 텍스트 및 대상 URL을 프로그래밍 방식으로 제어할 수 있습니다. 이 경우 사용자가 링크를 명시적으로 클릭하면 브라우저가 대상 페이지로 이동합니다. 대상 페이지는 HTTP GET 명령을 사용하여 호출됩니다. 따라서 대상 페이지의 URL에 쿼리 문자열을 지정하지 않으면 소스 페이지에 대한 정보가 대상 페이지에 전달되지 않습니다. 소스 및 대상 페이지가 같은 웹 응용 프로그램에 있는 경우 세션 상태나 응용 프로그램 상태를 사용하여 정보를 공유할 수 있습니다.

기본적으로 ASP.NET 웹 페이지에 있는 단추는 페이지를 그 자체로 게시합니다. 페이지 간 게시를 사용하면 ASP.NET 웹 페이지에서 현재 페이지를 다른 페이지로 게시하기 위한 단추를 구성할 수 있습니다. 일반적인 예를 들면, 다중 페이지 폼을 만드는 경우 폼의 다음 페이지와 이전 페이지로 이동하도록 페이지에 단추를 구성할 수 있습니다.

페이지 간 게시는 사용자 작업에 의해 전송이 시작된다는 점에서 하이퍼링크와 비슷합니다. 하지만 페이지 간 게시에서 대상 페이지는 HTTP POST 명령을 사용하여 호출되는데, 이 명령은 소스 페이지의 컨트롤 값을 대상 페이지로 전송합니다. 또한 소스 및 대상 페이지가 같은 웹 응용 프로그램에 있는 경우 대상 페이지는 소스 페이지의 공용 속성에 액세스할 수 있습니다. 모든 경우에서와 같이 응용 프로그램에 있는 모든 페이지는 세션 상태나 응용 프로그램 상태로 저장된 정보를 공유할 수 있습니다.

자세한 내용은 ASP.NET 웹 페이지에서 페이지 간 게시방법: ASP.NET 웹 페이지를 다른 페이지에 게시를 참조하십시오.

사용자 브라우저의 기능을 사용하여 사용자를 다른 페이지로 리디렉션할 수 있습니다. 브라우저 리디렉션의 경우 브라우저에서 HTTP GET 요청 형식으로 대상 서버에 새로운 요청을 보냅니다.

클라이언트 스크립트나 서버 코드에서 프로그래밍 방식으로 리디렉션을 트리거할 수 있습니다. <form> 요소의 method 특성 값이 get이면 클라이언트 스크립트에서 form.submit 메서드를 호출할 수 있습니다. 이 경우 현재 페이지에 폼 데이터가 포함되어 있으면 요청된 URL에 대한 쿼리 문자열로 이를 첨부하여 대상 서버로 해당 데이터가 전달됩니다.

서버 코드에서는 Redirect 메서드를 호출하여 프로그래밍 방식으로 리디렉션할 수 있습니다. 이 메서드는 브라우저에서 대상 페이지에 대한 HTTP GET 명령을 실행하도록 하는 명령을 사용자 브라우저에 보냅니다. 서버 Redirect 메서드를 호출하는 것은 대상 페이지에 대한 새로운 요청을 발생시킨다는 점에서 프로그래밍 관점에서 하이퍼링크를 클릭하는 것과 동일합니다. 사용자 고유 코드에서 메서드를 호출하기 때문에 쿼리 문자열 정보를 비롯한 대상 URL을 동적으로 정의할 수 있습니다. 소스 및 대상 페이지가 같은 웹 응용 프로그램에 있는 경우 데이터를 세션 상태로 저장하는 서버 코드를 추가하여 소스 및 대상 페이지 간에 데이터를 공유할 수 있습니다.

x3x8t37x.alert_note(ko-kr,VS.100).gif참고:

Internet Explorer 버전 6.0까지는 URL에 포함된 문자를 최대 2,048개까지만 처리할 수 있습니다. 이는 쿼리 문자열의 데이터를 포함한 수치입니다. URL이 2,048문자를 초과하면 오류가 발생할 수도 있고, 쿼리 문자열의 데이터가 잘리거나 요청과 함께 전달되지 않을 수도 있습니다. 숨김 필드에 저장되어 있는 뷰 상태 정보가 요청의 일부로 포함되면 ASP.NET 웹 페이지에서 게시 데이터를 포함하는 GET 요청이 2,048문자를 쉽게 초과할 수 있습니다. 이 경우 오류가 발생하게 됩니다. 다른 브라우저에는 이 제한이 없을 수 있습니다. 자세한 내용은 http://support.microsoft.com에서 Microsoft 기술 자료 문서 208427, "Maximum URL Length Is 2,083 Characters in Internet Explorer"를 참조하십시오. 페이지 간에 정보를 공유하려 할 때 이 제한으로 인해 문제가 발생하면 이 항목에서 설명하는 대로 HTTP POST 요청을 사용하여 사용자를 리디렉션하는 방식으로 문제를 해결할 수 있습니다. 응용 프로그램에 HTTP GET 요청이 필요한 경우 세션 상태 같은 다른 방식으로 쿼리 문자열을 사용하지 않고 정보를 저장할 수 있습니다.

Transfer 메서드를 호출하여 서버에 있는 대상 페이지에 프로그래밍 방식으로 리디렉션할 수도 있습니다. 이 경우 서버는 단순히 현재 소스 페이지 컨텍스트를 대상 페이지로 전송합니다. 그러면 소스 페이지 대신 대상 페이지가 렌더링됩니다. 소스 및 대상 페이지는 같은 웹 응용 프로그램에 있어야 합니다. 페이지 간 게시에서와 같이 Transfer 메서드에는 소스 페이지로부터 컨트롤 값과 공용 속성 값을 읽을 수 있는 장점이 있습니다.

소스 및 대상 페이지 간의 전송은 서버에서 이뤄지기 때문에 브라우저에는 변경된 페이지에 대한 정보가 없으며, 원래 소스 URL에 대한 정보가 유지됩니다. 예를 들어 Internet Explorer의 주소 상자는 전송 후에도 변경되지 않으며 가장 최근에 요청한 페이지(일반적으로 소스 페이지)의 URL을 계속 표시합니다. 브라우저의 기록은 전송 내역을 반영하도록 업데이트되지 않으므로 이로 인해 사용자가 브라우저에서 페이지를 새로 고치거나 브라우저의 뒤로 단추를 클릭하면 예기치 않은 동작이 발생할 수 있습니다. 따라서 사용자에게 URL을 숨긴 상태로 페이지를 표시하는 응용 프로그램에서 Transfer 메서드를 호출하는 것이 가장 좋습니다.

다음 표에서는 페이지 간에 리디렉션할 수 있는 방법에 대해 간략히 설명합니다.

방법

특성

용도

하이퍼링크

  • 대상 페이지에 대한 새로운 요청을 수행합니다.

  • 현재 페이지 정보를 대상 페이지로 전달하지 않습니다.

  • 사용자 초기화가 필요합니다.

  • 같은 웹 응용 프로그램에 있는 페이지뿐만 아니라 모든 페이지로 리디렉션합니다.

  • 쿼리 문자열이나 세션 상태를 사용하여 페이지 간 정보를 공유할 수 있습니다. HyperLink 컨트롤을 사용하면 URL 및 쿼리 문자열을 프로그래밍 방식으로 만들 수 있습니다.

  • 메뉴 또는 링크 목록에서처럼 추가 처리 없이 탐색하려는 경우

  • 사용자가 탐색을 제어해야 하는 경우

페이지 간 게시

  • 현재 페이지 정보를 대상 페이지로 게시합니다.

  • 게시 정보를 대상 페이지에서 사용할 수 있게 합니다.

  • 사용자 초기화가 필요합니다.

  • 같은 웹 응용 프로그램에 있는 페이지뿐만 아니라 모든 페이지로 리디렉션합니다.

  • 대상 페이지와 소스 페이지가 같은 웹 응용 프로그램에 있는 경우 대상 페이지가 소스 페이지의 공용 속성을 읽을 수 있게 합니다.

  • 현재 페이지 정보를 대상 페이지로 전달하려는 경우(다중 페이지 폼)

  • 사용자가 탐색을 제어해야 하는 경우

브라우저 리디렉션

  • 대상 페이지에 대한 새로운 HTTP GET 요청을 수행합니다.

  • 쿼리 문자열이 있는 경우 이를 대상 페이지로 전달합니다. Internet Explorer에서 쿼리 문자열의 크기는 2,048문자로 제한됩니다.

  • 대상 URL 및 쿼리 문자열에 대한 프로그래밍 방식 제어 및 동적 제어를 제공합니다.

  • 같은 웹 응용 프로그램에 있는 페이지뿐만 아니라 모든 페이지로 리디렉션할 수 있게 합니다.

  • 세션 상태를 사용하여 소스 및 대상 페이지 사이에 정보를 공유할 수 있도록 합니다.

  • 조건적 탐색을 통해 탐색하는 시기와 대상 URL을 제어하려는 경우. 예를 들어 응용 프로그램에서 사용자가 제공하는 데이터에 따라 탐색할 페이지를 결정해야 하는 경우 이 옵션을 사용합니다.

서버 전송

  • 소스 페이지 대신에 렌더링하는 새 페이지로 컨트롤을 전송합니다.

  • 소스 페이지와 같은 웹 응용 프로그램에 있는 대상 페이지로만 리디렉션합니다.

  • 소스 페이지에서 값과 공용 속성을 읽을 수 있게 합니다.

  • 브라우저 정보를 대상 페이지에 대한 정보로 업데이트하지 않습니다. 브라우저에서 새로 고침이나 뒤로 단추를 누르면 예기치 않은 동작이 발생할 수 있습니다.

  • 탐색이 발생하는 시기를 제어하고 소스 페이지의 컨텍스트를 액세스하려는 조건적 탐색의 경우

  • 사용자에게 URL을 표시하지 않는 경우에 가장 적합합니다.

표시: