PageStatePersister クラスとは? わかりやすく解説

PageStatePersister クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

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

名前空間: System.Web.UI
アセンブリ: System.Web (system.web.dll 内)
構文構文

Public MustInherit Class
 PageStatePersister
Dim instance As PageStatePersister
public abstract class PageStatePersister
public ref class PageStatePersister abstract
public abstract class PageStatePersister
public abstract class PageStatePersister
解説解説

HTTP 要求および HTTP 応答には本質的に状態がありません。HTTP 要求間で状態情報保持するために、ASP.NET サーバー ページには Page の状態を格納できます。この状態はビューステート呼ばれページコントロール設定、および、サーバーへの最後ラウンド トリップユーザー参照し操作したページコントロールと同じページおよびコントロールとして表示できるようにするデータ構成されています。同一ページに対して連続して行われた要求間のビューステート格納するための機構はいくつありますPageStatePersister 抽象クラスは、このような状態情報格納するための基本クラス表します

ASP.NET既定ビューステート永続化機構では、非表示HTML 要素 (type 属性"hidden"設定され要素) 内に Base64エンコードされた文字列として状態情報保持されます。ASP.NET ページでは、HiddenFieldPageStatePersister オブジェクト使用してこの作業が行われますその際、IStateFormatter インスタンス使用してオブジェクトの状態情報初期化と逆シリアル化が行われますまた、帯域幅リソース制限のあるモバイル クライアント用の SessionPageStatePersister クラス使用してサーバー上の Session オブジェクトページビューステート格納することもできます場合によっては、ビューステート永続化を完全に無効にすることもできます。完全に無効にすると、状態の永続性依存するページコントロール適切に動作しないことがありますページ状態管理ビューステート詳細については、「ASP.NET状態管理」を参照してください

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

既存ビューステート永続化機構対応していないクライアントビューステート保持するには、PageStatePersister クラス拡張して独自のビューステート永続メソッド使用しページ アダプタ使用してページ表示されるクライアント種類に応じて異なビューステート永続化機構使用するように ASP.NET アプリケーション構成できますPageStatePersister クラス派生クラスでは、Save 抽象メソッドオーバーライドしてビューステートコントロールの状態永続媒体格納しLoad メソッドオーバーライドして格納したビューステートコントロールの状態抽出する必要がありますビューステートコントロールの状態シリアル化して文字列にする必要がある場合は、StateFormatter プロパティからアクセスする IStateFormatter オブジェクト使用できます。このオブジェクト使用すると、Base64エンコードされた文字列オブジェクトの状態情報シリアル化する処理、および Base64エンコードされた文字列からオブジェクトの状態情報を逆シリアル化する処理が効率的に行われますまた、StateFormatter プロパティオーバーライドして、オブジェクトの状態をシリアル化する独自の機構提供することもできます

使用例使用例

Web サーバー上にビューステートコントロールの状態永続化する PageStatePersister オブジェクト作成する方法次のコード例示しますStreamPageStatePersister は、Load メソッドおよび Save メソッドオーバーライドし、ビューステート情報抽出して永続化する方法示してます。状態の永続化機構状況適した表示クライアント機能関連するので、ASP.NET アプリケーションStreamPageStatePersisterアクティブにするための MyPageAdapter クラス用意してます。最後にブラウザ機能 (.browser) ファイル指定してMyPageAdapter アダプタ特定のクラスクライアント (この例では、既定の Web ブラウザ) に対して有効にしています。

Imports System
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 'New

        '
        ' 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 ' Load

        '
        ' 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 'Save
        ' 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
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;
        }
    }
}

PageAdapter クラス作成する方法次のコード例示します。このクラスからは、ASP.NET Web ページビューステートおよびコントロールの状態永続化使用する StreamPageStatePersisterインスタンス返されます。

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 'MyPageAdapter

End Namespace
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);
        }
    }
}

これら 2 つクラスコンパイルして、サンプル実行使用できるアセンブリにします。その際次のようなコンパイラコマンド ライン使用しますコンパイルされたアセンブリASP.NET アプリケーションルートの下の \Bin ディレクトリ格納されている必要があります

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

最後にMyPageAdapter アダプタ有効にするために、ASP.NET アプリケーションルートの下に Browsers という名前のディレクトリ作成し構成情報指定した .browser ファイル含める必要があります構成ファイル内の <refid> 要素は、Default.browser 構成ファイル既定のブラウザ指定されている値をオーバーライドする構成であることを示してます。この例では、ASP.NET Web ページに対して MyPageAdapter使用します (通常、これらのページアダプタ使用されません)。

<browsers>
    <browser ref >
        <controlAdapters>
            <adapter 
                controlType="System.Web.UI.Page"                            
                adapterType="Samples.AspNet.CS.MyPageAdapter" />
        </controlAdapters>
    </browser>
</browsers>
継承階層継承階層
System.Object
  System.Web.UI.PageStatePersister
     System.Web.UI.HiddenFieldPageStatePersister
     System.Web.UI.SessionPageStatePersister
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
PageStatePersister メンバ
System.Web.UI 名前空間
ObjectStateFormatter クラス
LosFormatter クラス
Pair



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「PageStatePersister クラス」の関連用語

PageStatePersister クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



PageStatePersister クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS