PageStatePersister クラス

定義

ASP.NET ビューステート永続化機構の基本機能を提供します。

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
継承
PageStatePersister
派生

次のコード例は、Web サーバーでビューとコントロールの状態を PageStatePersister 保存するオブジェクトを作成する方法を示しています。 ビュー StreamPageStatePersister ステート情報を抽出して保存するメソッドをSaveオーバーライドLoadする方法を示します。 状態永続化メカニズムはアダプティブ レンダリングとクライアント機能に関連しているため、MyPageAdapterASP.NET アプリケーションに対してアクティブ化StreamPageStatePersisterするためのクラスが提供されます。 最後に、特定のクラスのクライアント (この場合は既定の Web ブラウザー) に対してアダプターを有効にする MyPageAdapter ブラウザー機能 (.browser) ファイルが提供されます。

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

次のコード例は、ASP.NET Web ページのビューとコントロールのStreamPageStatePersister状態を保持するために使用されるインスタンスを返すクラスを作成PageAdapterする方法を示しています。

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

次のコンパイラ コマンド ラインを使用して、サンプルの実行に使用できるアセンブリにこれら 2 つのクラスをコンパイルします。 コンパイル済みアセンブリが、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 という名前のディレクトリを作成し、構成情報を含む .browser ファイルを含める必要があります。 構成ファイル内の要素は <refid> 、Default.browser 構成ファイルの既定のブラウザーに指定された値を構成によってオーバーライドすることを示します。 この例では、 MyPageAdapter ASP.NET Web ページに使用されます (通常はアダプターは使用されません)。

<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 要素 (属性が設定"hidden"された要素type) で状態情報を Base64 でエンコードされた文字列として維持することです。 ASP.NET ページでは、オブジェクトをHiddenFieldPageStatePersister使用してこの作業を実行し、インスタンスをIStateFormatter使用してオブジェクトの状態情報をシリアル化および逆シリアル化します。 または、帯域幅とリソースが限られているモバイル クライアントのクラスを使用してSessionPageStatePersister、サーバー上のオブジェクトにページSessionのビューステートを格納することもできます。 場合によっては、ビュー ステートの永続化を完全に無効にすることがあります。 これを行うと、状態の永続化に依存するページやコントロールが正しく動作しないことがあります。 ページの状態管理とビューステートの詳細については、「ASP.NET 状態管理の概要」を参照してください。

コントロールを記述している場合は、オブジェクトであるディクショナリにコントロールの ViewState 状態情報を StateBag 格納できます。 開発者は、プロパティを使用してコントロールの状態を ControlState 取得します。 プロパティにキーと値を ViewState 割り当てると、オブジェクトは Page 要求間で状態情報をシリアル化します。 コントロールでカスタム状態処理を実行するには、メソッドとSaveViewStateメソッドをLoadViewStateオーバーライドします。 ページ開発者がビュー ステートを無効にすると、このディクショナリに格納されているすべての状態情報が失われます。 これを軽減するために、バージョン 2.0 ASP.NET では、重要な状態情報を制御状態と呼ばれる別のオブジェクトに格納できます。 ページ開発者がビュー ステートを無効にした場合、コントロール状態オブジェクトは影響を受けません。 コントロール状態オブジェクトに状態情報を格納するには、コントロールがコントロールをSaveControlStateオーバーライドLoadControlStateし、コントロールが初期化されるたびに状態情報をコントロール状態に格納するために、コントロールを登録する必要があります。 コントロールを登録してコントロールの状態を使用するには、メソッドを OnInit オーバーライドし、メソッドを RegisterRequiresControlState 呼び出します。 コントロールの開発時にプロパティとコントロールの状態をViewState使用する方法の詳細については、「カスタム ASP.NET サーバー コントロールの開発」を参照してください。

既存のビューステート永続化メカニズムをサポートできないクライアントでビューステートを維持するには、独自のPageStatePersisterビューステート永続化メソッドを導入するようにクラスを拡張し、ページアダプターを使用して、ページが提供されるクライアントの種類に基づいて異なるビューステート永続化メカニズムを使用するように ASP.NET アプリケーションを構成できます。 クラスから PageStatePersister 派生するクラスは、抽象 Save メソッドをオーバーライドして、永続化メディアにビューステートと制御状態を格納し、メソッドを Load オーバーライドして抽出する必要があります。 ビューステートと制御状態を文字列にシリアル化する必要がある場合は、プロパティを IStateFormatter 使用してアクセスされるオブジェクトを StateFormatter 使用できます。 これは、オブジェクトの状態情報を Base64 でエンコードされた文字列に効率的にシリアル化および逆シリアル化します。 プロパティをオーバーライドして、独自の StateFormatter オブジェクト状態のシリアル化メカニズムを指定することもできます。

コンストラクター

PageStatePersister(Page)

PageStatePersister クラスの新しいインスタンスを初期化します。

プロパティ

ControlState

オブジェクトを取得または設定します。このオブジェクトは、現在の Page オブジェクトによって格納されているコントロールが Web サーバーへの HTTP 要求間で永続化するために使用しているデータを表します。

Page

ビューステート永続化機構が作成される対象の Page オブジェクトを取得または設定します。

StateFormatter

IStateFormatter メソッドおよび ViewState メッソドへの呼び出しで、ControlState プロパティおよび Save() プロパティに格納されている状態情報のシリアル化と逆シリアル化に使用する Load() オブジェクトを取得します。

ViewState

オブジェクトを取得または設定します。このオブジェクトは、現在の Page オブジェクトによって格納されているコントロールが Web サーバーへの HTTP 要求間で永続化するために使用しているデータを表します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
Load()

派生クラスによってオーバーライドされ、Page オブジェクトが自身のコントロール階層を初期化するときに、永続化された状態情報を逆シリアル化して読み込みます。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Save()

派生クラスによってオーバーライドされ、Page オブジェクトがメモリから読み出されるときに、永続化された状態情報をシリアル化します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください