다음을 통해 공유


PageStatePersister 클래스

정의

ASP.NET 뷰 상태 유지 메커니즘의 기본 기능을 제공합니다.

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
상속
PageStatePersister
파생

예제

다음 코드 예제에는 만드는 방법을 보여 줍니다는 PageStatePersister 웹 서버의 뷰 및 컨트롤 상태를 저장 하는 개체입니다. 합니다 StreamPageStatePersister 재정의 하는 방법에 설명 합니다 LoadSave 상태 정보를 추출 하 고 보기를 저장 하는 메서드. 상태 지 속성 메커니즘 적응형 렌더링 및 클라이언트 기능에 관련 되어 있으므로 합니다 MyPageAdapter 클래스를 지정을 활성화를 StreamPageStatePersister ASP.NET 애플리케이션에 대 한 합니다. 브라우저 기능 (.browser) 파일로 사용할 수 있도록 제공 됩니다 마지막으로 MyPageAdapter 어댑터 (이 경우 기본 웹 브라우저)에서 클라이언트의 특정 클래스에 대 한 합니다.

namespace Samples.AspNet.CS
{

    using System;
    using System.IO;
    using System.Security.Permissions;
    using System.Web;
    using System.Web.UI;

    //
    // The StreamPageStatePersister is an example view state
    // persistence mechanism that persists view and control
    // state on the Web server.
    //
    [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
    public class StreamPageStatePersister : PageStatePersister
    {

        public StreamPageStatePersister(Page page)
            : base(page)
        {
        }
        //
        // Load ViewState and ControlState.
        //
        public override void Load()
        {
            Stream stateStream = GetSecureStream();

            // Read the state string, using the StateFormatter.
            StreamReader reader = new StreamReader(stateStream);

            IStateFormatter formatter = this.StateFormatter;
            string fileContents = reader.ReadToEnd();

            // Deserilize returns the Pair object that is serialized in
            // the Save method.
            Pair statePair = (Pair)formatter.Deserialize(fileContents);

            ViewState = statePair.First;
            ControlState = statePair.Second;
            reader.Close();
            stateStream.Close();
        }
        //
        // Persist any ViewState and ControlState.
        //
        public override void Save()
        {

            if (ViewState != null || ControlState != null)
            {
                if (Page.Session != null)
                {
                    Stream stateStream = GetSecureStream();

                    StreamWriter writer = new StreamWriter(stateStream);

                    IStateFormatter formatter = this.StateFormatter;
                    Pair statePair = new Pair(ViewState, ControlState);

                    // Serialize the statePair object to a string.
                    string serializedState = formatter.Serialize(statePair);

                    writer.Write(serializedState);
                    writer.Close();
                    stateStream.Close();
                }
                else
                {
                    throw new InvalidOperationException("Session needed for StreamPageStatePersister.");
                }
            }
        }
        // Return a secure Stream for your environment.
        private Stream GetSecureStream()
        {
            // You must provide the implementation to build
            // a secure Stream for your environment.
            return null;
        }
    }
}
Imports System.IO
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI

Namespace Samples.AspNet.VB

    ' The StreamPageStatePersister is an example view state
    ' persistence mechanism that persists view and control
    ' state on the Web server.
    '
    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public Class StreamPageStatePersister
        Inherits PageStatePersister


        Public Sub New(ByVal page As Page)
            MyBase.New(page)
        End Sub

        '
        ' Load ViewState and ControlState.
        '
        Public Overrides Sub Load()

            Dim stateStream As Stream
            stateStream = GetSecureStream()

            ' Read the state string, using the StateFormatter.
            Dim reader As New StreamReader(stateStream)

            Dim serializedStatePair As String
            serializedStatePair = reader.ReadToEnd
            Dim statePair As Pair

            Dim formatter As IStateFormatter
            formatter = Me.StateFormatter

            ' Deserilize returns the Pair object that is serialized in
            ' the Save method.      
            statePair = CType(formatter.Deserialize(serializedStatePair), Pair)

            ViewState = statePair.First
            ControlState = statePair.Second
            reader.Close()
            stateStream.Close()
        End Sub

        '
        ' Persist any ViewState and ControlState.
        '
        Public Overrides Sub Save()

            If Not (ViewState Is Nothing) OrElse Not (ControlState Is Nothing) Then
                If Not (Page.Session Is Nothing) Then

                    Dim stateStream As Stream
                    stateStream = GetSecureStream()

                    ' Write a state string, using the StateFormatter.
                    Dim writer As New StreamWriter(stateStream)

                    Dim formatter As IStateFormatter
                    formatter = Me.StateFormatter

                    Dim statePair As New Pair(ViewState, ControlState)

                    Dim serializedState As String
                    serializedState = formatter.Serialize(statePair)

                    writer.Write(serializedState)
                    writer.Close()
                    stateStream.Close()
                Else
                    Throw New InvalidOperationException("Session needed for StreamPageStatePersister.")
                End If
            End If
        End Sub
        ' Return a secure Stream for your environment.
        Private Function GetSecureStream() As Stream
            ' You must provide the implementation to build
            ' a secure Stream for your environment.
            Return Nothing
        End Function
    End Class
End Namespace

다음 코드 예제에서는 만드는 방법을 보여 줍니다.는 PageAdapter 클래스의 인스턴스를 반환 하는 StreamPageStatePersister에 ASP.NET 웹 페이지 보기 및 컨트롤 상태를 유지 하는 데 사용 됩니다.

namespace Samples.AspNet.CS {

    using System.Security.Permissions;
    using System.Web;
    using System.Web.UI;

    [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
    public class MyPageAdapter : System.Web.UI.Adapters.PageAdapter {

        public override PageStatePersister GetStatePersister() {
            return new Samples.AspNet.CS.StreamPageStatePersister(Page);
        }
    }
}
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI

Namespace Samples.AspNet.VB

    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public Class MyPageAdapter
       Inherits System.Web.UI.Adapters.PageAdapter


       Public Overrides Function GetStatePersister() As PageStatePersister
          Return New Samples.AspNet.VB.StreamPageStatePersister(Page)
       End Function 'GetStatePersister

    End Class

End Namespace

이 두 클래스를를 사용할 수 있는 샘플을 실행 하려면 다음 컴파일러 명령줄을 사용 하 여 어셈블리로 컴파일하십시오. ASP.NET 애플리케이션 루트 아래의 \Bin 디렉터리에 컴파일된 어셈블리 인지 확인 합니다.

// C:\>csc /t:library /out:C:\inetpub\wwwroot\bin\Samples.AspNet.CS.dll MyPageAdapter.cs TextFilePageStatePersister.cs
//
// C:\>
' C:\>vbc /t:library /out:C:\inetpub\wwwroot\bin\Samples.AspNet.VB.dll MyPageAdapter.vb TextFilePageStatePersister.vb
'

마지막으로 사용 하도록 설정 된 MyPageAdapter 어댑터를 ASP.NET 애플리케이션 루트 아래에 있는 브라우저 라는 디렉터리를 만들고 구성 정보를 사용 하 여.browser 파일을 포함 해야 합니다. <refid> 요소 구성 파일에서 구성을 Default.browser 구성 파일에 기본 브라우저에 대 한 지정 된 값을 재정의 함을 나타냅니다. 이 예제에서는 MyPageAdapter (일반적으로 어댑터가 사용 된 위치) ASP.NET 웹 페이지에 사용 됩니다.

<browsers>  
    <browser refid="Default" >  
        <controlAdapters>  
            <adapter   
                controlType="System.Web.UI.Page"                              
                adapterType="Samples.AspNet.CS.MyPageAdapter" />  
        </controlAdapters>  
    </browser>  
</browsers>  

설명

HTTP 요청 및 응답을 기본적으로 상태 비저장 이며 HTTP 요청 간에 상태 정보를 유지 하려면 ASP.NET 서버 페이지를 저장할 수 Page 상태입니다. 뷰 상태 라고 하는이 상태에서는 페이지 및 컨트롤 설정 및 데이터 페이지 및 컨트롤 표시 처럼 동일 하다는 사용자 확인 하 고 서버에 마지막 라운드트립에서에서 상호 작용할 수 있도록 구성 됩니다. 동일한 페이지에 대 한 후속 요청 간에 뷰 상태를 저장 하는 여러 메커니즘 존재 합니다. 추상 PageStatePersister 클래스는 이러한 상태 정보 스토리지 메커니즘에 대한 기본 클래스를 나타냅니다.

ASP.NET의 기본 뷰 상태 유지 메커니즘이 숨겨진된 HTML 요소를 Base64로 인코딩된 문자열로 상태 정보를 유지 하는 것 (사용 하 여 요소를 type 특성이로 설정 "hidden") 페이지. ASP.NET 페이지를 사용 하 여는 HiddenFieldPageStatePersister 이 작업을 수행 하는 개체를 사용 하 여 작동는 IStateFormatter 인스턴스를 직렬화 및 역직렬화 개체 상태 정보를 합니다. 또는 사용자 페이지의 뷰 상태를 저장할 수 있습니다 합니다 Session 사용 하 여 서버 개체는 SessionPageStatePersister 제한 된 대역폭 및 리소스를 사용 하 여 모바일 클라이언트에 대 한 클래스입니다. 경우에 따라 보기 상태 지 속성을 완전히 비활성화할 수도 있습니다. 이 작업을 수행 하는 경우 결과 경우에 따라 페이지 및 컨트롤 상태 지 속성을 사용 하는 올바르게 작동 하지 않을 합니다. 페이지 상태 관리 및 보기 상태에 대 한 자세한 내용은 참조 하세요. ASP.NET 상태 관리 개요합니다.

컨트롤을 작성 하는 경우 컨트롤에 대 한 상태 정보를 저장할 수 있습니다 합니다 ViewState 사전에는 StateBag 개체입니다. 개발자는 컨트롤 상태를 통해 검색 된 ControlState 속성입니다. 키와 값을 할당 합니다 ViewState 속성 및 Page 개체가 요청 간에 상태 정보를 serialize 합니다. 컨트롤에서 처리 하는 사용자 지정 상태를 수행 하려면 재정의 LoadViewStateSaveViewState 메서드. 이 사전에 저장 된 모든 상태 정보 페이지 개발자가 뷰 상태를 비활성화 하는 경우 손실 됩니다. 이 문제를 줄이려면, asp.net 버전 2.0 컨트롤 상태 라는 별도 개체에서 중요 한 상태 정보를 저장할 수 있습니다. 컨트롤 상태 개체는 페이지 개발자가 뷰 상태를 비활성화 하는 경우에 영향이 없습니다. 컨트롤의 재정의 필요 컨트롤 상태 개체에 상태 정보를 저장 합니다 LoadControlStateSaveControlState 메서드 및 컨트롤에서 상태 정보를 저장할 등록 하는 컨트롤이 초기화 될 때마다 상태를 제어 합니다. 재정의 하 여 컨트롤 상태를 사용 하기 위한 컨트롤을 등록할 수 있습니다 합니다 OnInit 메서드를 호출 합니다 RegisterRequiresControlState 메서드. 사용에 대 한 자세한 내용은 합니다 ViewState 속성 및 컨트롤 상태 컨트롤을 개발할 때 참조 사용자 지정 ASP.NET 서버 컨트롤 개발합니다.

뷰 상태를 유지 하려면 기존 지원할 수 없는 클라이언트 뷰 상태 유지 메커니즘, 확장할 수 있습니다는 PageStatePersister 고유한 상태 지 속성 메서드를 소개 하기 위해 클래스 및 페이지 어댑터를 사용 하 여 ASP.NET 애플리케이션을 구성 하려면 페이지가 제공 되는 클라이언트의 유형에 따라 다른 뷰 상태를 유지 하는 메커니즘을 사용 하도록 파생 된 클래스는 PageStatePersister 클래스는 추상 재정의 해야 합니다 Save 지 속성 매체에서 뷰 상태 및 컨트롤 상태를 저장 하 고 재정의 하는 메서드는 Load 추출 하는 방법입니다. 뷰 상태와 컨트롤 상태를 문자열로 serialize 해야 하는 경우 사용할 수 있습니다 합니다 IStateFormatter 를 사용 하 여 액세스 되는 개체는 StateFormatter 속성입니다. 효율적으로 직렬화 하 고 Base64로 인코딩된 문자열로 개체 상태 정보를 역직렬화합니다. 재정의할 수도 있습니다는 StateFormatter 속성을 사용자 고유의 개체 상태 serialization 메커니즘을 제공 합니다.

생성자

PageStatePersister(Page)

PageStatePersister 클래스의 새 인스턴스를 초기화합니다.

속성

ControlState

현재 Page 개체에 포함된 컨트롤에서 웹 서버에 대한 HTTP 요청 간에 유지하기 위해 사용하는 데이터를 나타내는 개체를 가져오거나 설정합니다.

Page

뷰 상태 유지 메커니즘이 작성된 대상 Page 개체를 가져오거나 설정합니다.

StateFormatter

IStateFormatterViewState 메서드를 호출하는 동안 ControlStateSave() 속성에 포함된 상태 정보를 직렬화 및 역직렬화하는 데 사용되는 Load() 개체를 가져옵니다.

ViewState

현재 Page 개체에 포함된 컨트롤에서 웹 서버에 대한 HTTP 요청 간에 유지하기 위해 사용하는 데이터를 나타내는 개체를 가져오거나 설정합니다.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
Load()

Page 개체에서 해당 컨트롤 계층을 초기화할 때 유지된 상태 정보를 역직렬화하고 로드하기 위해 파생된 클래스에서 재정의합니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
Save()

Page 개체를 메모리에서 언로드할 때 유지된 상태 정보를 serialize하기 위해 파생된 클래스에서 재정의합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

추가 정보