방법: ASP.NET 웹 페이지 간에 값 전달

업데이트: 2007년 11월

응용 프로그램이 ASP.NET의 특정 웹 페이지에서 다른 웹 페이지로 리디렉션(탐색)하는 경우 소스 페이지의 정보를 대상 페이지에 전달할 수 있습니다. 사용자가 구입할 품목을 선택할 수 있는 페이지를 예로 들 수 있습니다. 사용자가 페이지를 제출하면 이 사용자가 입력한 정보를 처리할 수 있는 다른 페이지를 호출할 수 있습니다.

여러 가지 방법을 사용하여 페이지 간에 정보를 전달할 수 있으며 이 중 일부는 리디렉션이 발생하는 방식에 따라 다릅니다. 다음과 같은 옵션을 사용할 수 있습니다.

  • 대상 페이지의 URL에 정보를 추가하는 쿼리 문자열을 사용합니다. HyperLink 컨트롤을 사용하여 페이지에 탐색 기능을 빌드하거나 Redirect 메서드를 사용하여 프로그래밍 방식을 통해 다른 페이지로 리디렉션하는 경우 쿼리 문자열을 사용할 수 있습니다.

    페이지가 같은 웹 응용 프로그램 내에 없는 경우에도 쿼리 문자열에 값을 포함하여 전달할 수 있으며 ASP.NET 웹 페이지가 아닌 페이지에 정보를 전달하려는 경우에도 이렇게 할 수 있습니다. 대상 페이지가 ASP.NET 웹 페이지인 경우에는 HttpRequest 개체의 QueryString 속성에서 쿼리 문자열의 값을 읽을 수 있습니다.

    참고:

    쿼리 문자열을 사용하여 중요한 데이터를 전달하지 마십시오. 쿼리 문자열에 포함된 정보는 사용자가 볼 수 있고 쉽게 수정될 수 있으므로 보안 문제가 발생할 수 있습니다.

  • 현재 응용 프로그램의 모든 ASP.NET 웹 페이지에서 액세스할 수 있도록 세션 상태를 사용하여 정보를 저장합니다. 그러나 이 방법을 사용하면 서버 메모리가 소모되고, 세션이 만료될 때까지 정보가 저장되므로 단순히 정보를 다음 페이지로 전달하려는 경우보다 많은 오버헤드가 발생할 수 있습니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

  • 대상 페이지에서 소스 페이지의 컨트롤 값과 공용 속성 값을 직접 읽습니다. 소스 페이지에서 대상 페이지에 동시 게시하는 경우(자세한 내용은 방법: ASP.NET 웹 페이지를 다른 페이지에 게시 참조) 및 Transfer 메서드를 호출하여 서버의 소스 페이지에서 대상 페이지로 실행을 이동하는 경우에 이 방법이 사용됩니다. 이 항목에서는 소스 페이지의 값을 직접 읽는 방법에 대해 설명합니다.

소스 페이지에서 공용 속성 값 가져오기

대상 페이지와 정보를 공유할 목적으로 소스 페이지를 디자인하는 경우 두 페이지가 모두 ASP.NET 웹 페이지이면 페이지 간에 공유할 정보를 노출하는 공용 속성을 소스 페이지에 추가할 수 있습니다. 그런 다음 대상 페이지에서 속성 값을 읽을 수 있습니다.

참고:

두 페이지가 모두 같은 웹 응용 프로그램에 있는 경우에만 대상 페이지에서 소스 페이지 속성을 읽을 수 있습니다.

소스 페이지에서 공용 속성 값을 가져오려면

  1. 소스 페이지에서 하나 이상의 공용 속성을 만듭니다.

    다음 코드 예제에서는 textCity라는 TextBox 컨트롤의 값을 노출하는 CurrentCity 속성을 보여 줍니다.

    Public ReadOnly Property CurrentCity() As String
        Get
            Return textCity.Text
        End Get
    End Property
    
    public String CurrentCity
    {
        get
        {
            return textCity.Text;
        }
    }
    
    참고:

    소스 페이지에서 주로 페이지 간 게시용 값을 노출하기 위해 만드는 속성은 대개 읽기 전용 속성입니다. 소스 페이지에 공용 읽기/쓰기 속성이 포함될 수 있지만 일반적으로 대상 페이지 속성에서 소스 페이지 속성을 설정하면 값이 지속되지 않으므로 의미가 없습니다.

  2. 대상 페이지에서 소스 페이지를 가리키는 @ PreviousPageType 페이지 지시문을 추가합니다.

    다음 코드 예제에서는 SourcePage.aspx라는 소스 페이지를 참조하는 PreviousPageType 지시문을 보여 줍니다.

    <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 
    

    PreviousPageType 지시문을 사용하면 페이지의 PreviousPage 속성이 소스 페이지 클래스로 형식화됩니다.

  3. 대상 페이지 코드에서 PreviousPage 속성에 대한 강력한 형식의 멤버를 사용하여 소스 코드 속성을 읽습니다.

    다음 코드 예제에서는 소스 페이지에 정의된 CurrentCity 속성의 값을 읽습니다.

    Label1.Text = PreviousPage.CurrentCity
    
    Label1.Text = PreviousPage.CurrentCity;
    

같은 응용 프로그램의 소스 페이지에서 컨트롤 정보 가져오기

소스 페이지와 대상 페이지가 모두 ASP.NET 웹 페이지이고 같은 웹 응용 프로그램에 있는 경우 대상 페이지에서 소스 페이지의 컨트롤 값을 읽을 수 있습니다. 필요한 정보가 포함된 공용 속성을 소스 페이지에서 노출하지 않는 경우에 이 방법을 사용할 수 있습니다.

같은 응용 프로그램의 소스 페이지에서 컨트롤 값을 가져오려면

  • 대상 페이지에서 대상 페이지의 PreviousPage 속성을 사용하여 소스 페이지에 대한 참조를 가져온 다음 FindControl 메서드를 호출하여 필요한 컨트롤에 대한 참조를 가져옵니다.

    다음 코드 예제에서는 소스 페이지에 있는 TextBox1 컨트롤의 값을 가져와 Label1 컨트롤에 표시합니다.

    If Not Page.PreviousPage Is Nothing Then
        Dim SourceTextBox As TextBox
        SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
            TextBox)
        If Not SourceTextBox Is Nothing Then
            Label1.Text = SourceTextBox.Text
        End If
    End If
    
    if (Page.PreviousPage != null)
    {
        TextBox SourceTextBox = 
            (TextBox)Page.PreviousPage.FindControl("TextBox1");
        if (SourceTextBox != null)
        {
            Label1.Text = SourceTextBox.Text;
        }
    }
    
    참고:

    FindControl 메서드는 현재 명명 컨테이너에서 컨트롤을 찾습니다. 찾고 있는 컨트롤이 다른 컨트롤 내에 있는 경우에는(일반적으로 템플릿 내부) 먼저 컨테이너에 대한 참조를 가져온 후 컨테이너를 검색하여 가져올 컨트롤을 찾아야 합니다.

다른 응용 프로그램의 소스 페이지에서 게시 정보 가져오기

소스 페이지와 대상 페이지가 같은 웹 응용 프로그램에 없는 경우 대상 페이지에서 소스 페이지의 게시된 값을 읽을 수 있습니다. 대상 페이지만 ASP.NET 웹 페이지이고 소스 페이지는 아닌 경우에도 이 방법이 사용됩니다. 게시 값만 가져올 수 있으며 페이지에 있는 임의의 컨트롤에 대한 값은 읽을 수 없습니다.

다른 응용 프로그램의 소스 페이지에서 컨트롤 값을 가져오려면

  • 대상 페이지에서 이름/값 쌍의 사전을 반환하는 Form 컬렉션을 읽습니다. 이 때 각 이름/값 쌍은 게시된 값을 나타냅니다.

    다음 코드 예제에서는 소스 페이지에서 게시된 모든 컨트롤의 ID와 값을 표시하고 게시된 값을 Label1이라는 레이블에 표시합니다.

    참고:

    ASP.NET 웹 페이지의 게시 정보에는 __VIEWSTATE, __EVENTTARGET 및 __EVENTARGUMENT 등과 같이 페이지에서 내부 처리에 사용되는 숨김 필드의 값이 포함됩니다. 다음 코드 예제에서는 선행 밑줄(__)을 사용하여 이름을 지정하는 게시된 필드의 값을 제외합니다.

    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        Dim displayValues As New StringBuilder()
        Dim postedValues As NameValueCollection = Request.Form
        Dim nextKey As String
        For i As Integer = 0 To postedValues.AllKeys.Length - 1
            nextKey = postedValues.AllKeys(i)
            If nextKey.Substring(0, 2) <> "__" Then
                displayValues.Append("<br>")
                displayValues.Append(nextKey)
                displayValues.Append(" = ")
                displayValues.Append(postedValues(i))
            End If
        Next
        Label1.Text = displayValues.ToString()
    End Sub
    
    void Page_Load(object sender, EventArgs e)
    {
        System.Text.StringBuilder displayValues = 
            new System.Text.StringBuilder();
        System.Collections.Specialized.NameValueCollection 
            postedValues = Request.Form;
        String nextKey;
        for(int i = 0; i < postedValues.AllKeys.Length - 1; i++)
        {
            nextKey = postedValues.AllKeys[i];
            if(nextKey.Substring(0, 2) != "__")
            {
                displayValues.Append("<br>");
                displayValues.Append(nextKey);
                displayValues.Append(" = ");
                displayValues.Append(postedValues[i]);
            }
        }
       Label1.Text = displayValues.ToString();
    }
    

참고 항목

작업

방법: ASP.NET 웹 페이지 호출 방식 확인

개념

ASP.NET 웹 페이지에서 페이지 간 게시

ASP.NET 상태 관리 개요