次の方法で共有


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してビューステート情報を抽出および保存する方法を示します。 状態永続化メカニズムはアダプティブ レンダリングとクライアント機能に関連しているため、 MyPageAdapter ASP.NET アプリケーションの を StreamPageStatePersister アクティブにするために クラスが提供されます。 最後に、ブラウザー機能 (.browser) ファイルが提供され、クライアントの特定のクラス (この場合は既定の Web ブラウザー) に対してアダプターが有効になります 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

次のコード例では、 のインスタンスStreamPageStatePersisterを返すクラスを作成PageAdapterする方法を示します。これは、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 アプリケーション ルートの下に 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 State Management の概要」を参照してください。

コントロールを記述している場合は、ディクショナリ (オブジェクト) にコントロールの 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)

適用対象

こちらもご覧ください