PageStatePersister クラス

定義

ビューステート永続化メカニズム ASP.NET 基本機能を提供します。

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

次のコード例では、ビューとコントロールの状態を Web サーバーに保存する PageStatePersister オブジェクトを作成する方法を示します。 StreamPageStatePersisterでは、LoadメソッドとSaveメソッドをオーバーライドして、ビュー ステート情報を抽出して保存する方法を示します。 状態永続化メカニズムはアダプティブ レンダリングとクライアント機能に関連しているため、 MyPageAdapter クラスは、ASP.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

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

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

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

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

コンストラクター

名前 説明
PageStatePersister(Page)

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

プロパティ

名前 説明
ControlState

Web サーバーに対する HTTP 要求間で保持するために使用する現在の Page オブジェクトに含まれるデータを表すオブジェクトを取得または設定します。

Page

ビュー ステート永続化メカニズムが作成される Page オブジェクトを取得または設定します。

StateFormatter

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

ViewState

Web サーバーに対する HTTP 要求間で保持するために使用する現在の Page オブジェクトに含まれるデータを表すオブジェクトを取得または設定します。

メソッド

名前 説明
Equals(Object)

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

(継承元 Object)
GetHashCode()

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

(継承元 Object)
GetType()

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

(継承元 Object)
Load()

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

MemberwiseClone()

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

(継承元 Object)
Save()

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

ToString()

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

(継承元 Object)

適用対象

こちらもご覧ください