PageStatePersister 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
ASP.NET 뷰 상태 유지 메커니즘의 기본 기능을 제공합니다.
public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
- 상속
-
PageStatePersister
- 파생
예제
다음 코드 예제에는 만드는 방법을 보여 줍니다는 PageStatePersister 웹 서버의 뷰 및 컨트롤 상태를 저장 하는 개체입니다. 합니다 StreamPageStatePersister
재정의 하는 방법에 설명 합니다 Load 및 Save 상태 정보를 추출 하 고 보기를 저장 하는 메서드. 상태 지 속성 메커니즘 적응형 렌더링 및 클라이언트 기능에 관련 되어 있으므로 합니다 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 합니다. 컨트롤에서 처리 하는 사용자 지정 상태를 수행 하려면 재정의 LoadViewState 고 SaveViewState 메서드. 이 사전에 저장 된 모든 상태 정보 페이지 개발자가 뷰 상태를 비활성화 하는 경우 손실 됩니다. 이 문제를 줄이려면, asp.net 버전 2.0 컨트롤 상태 라는 별도 개체에서 중요 한 상태 정보를 저장할 수 있습니다. 컨트롤 상태 개체는 페이지 개발자가 뷰 상태를 비활성화 하는 경우에 영향이 없습니다. 컨트롤의 재정의 필요 컨트롤 상태 개체에 상태 정보를 저장 합니다 LoadControlState 및 SaveControlState 메서드 및 컨트롤에서 상태 정보를 저장할 등록 하는 컨트롤이 초기화 될 때마다 상태를 제어 합니다. 재정의 하 여 컨트롤 상태를 사용 하기 위한 컨트롤을 등록할 수 있습니다 합니다 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 |
IStateFormatter 및 ViewState 메서드를 호출하는 동안 ControlState 및 Save() 속성에 포함된 상태 정보를 직렬화 및 역직렬화하는 데 사용되는 Load() 개체를 가져옵니다. |
ViewState |
현재 Page 개체에 포함된 컨트롤에서 웹 서버에 대한 HTTP 요청 간에 유지하기 위해 사용하는 데이터를 나타내는 개체를 가져오거나 설정합니다. |
메서드
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
Load() |
Page 개체에서 해당 컨트롤 계층을 초기화할 때 유지된 상태 정보를 역직렬화하고 로드하기 위해 파생된 클래스에서 재정의합니다. |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
Save() |
Page 개체를 메모리에서 언로드할 때 유지된 상태 정보를 serialize하기 위해 파생된 클래스에서 재정의합니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
추가 정보
.NET