Bagikan melalui


PageStatePersister Kelas

Definisi

Menyediakan fungsionalitas dasar untuk ASP.NET melihat mekanisme persistensi status.

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
Warisan
PageStatePersister
Turunan

Contoh

Contoh kode berikut menunjukkan cara membuat PageStatePersister objek yang menyimpan tampilan dan status kontrol di server Web. Menunjukkan StreamPageStatePersister cara mengambil Load alih metode dan Save untuk mengekstrak dan menyimpan informasi status tampilan. Karena mekanisme persistensi status terkait dengan penyajian adaptif dan kemampuan klien, MyPageAdapter kelas disediakan untuk mengaktifkan StreamPageStatePersister untuk aplikasi ASP.NET. Terakhir, file kemampuan browser (.browser) disediakan untuk mengaktifkan MyPageAdapter adaptor untuk kelas klien tertentu (dalam hal ini, browser Web default).

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

Contoh kode berikut menunjukkan cara membuat PageAdapter kelas yang mengembalikan instans StreamPageStatePersister, yang digunakan untuk mempertahankan status tampilan dan kontrol untuk halaman web 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

Kompilasi kedua kelas ini ke dalam rakitan yang dapat Anda gunakan untuk menjalankan sampel, menggunakan baris perintah pengkompilasi berikut. Pastikan bahwa rakitan yang dikompilasi berada di direktori \Bin di bawah akar aplikasi ASP.NET.

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

Terakhir, untuk mengaktifkan MyPageAdapter adaptor, Anda harus membuat direktori bernama Browser di bawah akar aplikasi ASP.NET, dan menyertakan file .browser dengan informasi konfigurasi. Elemen <refid> dalam file konfigurasi menunjukkan bahwa konfigurasi mengambil alih nilai yang ditentukan untuk browser default dalam file konfigurasi Default.browser. Dalam contoh ini, MyPageAdapter digunakan untuk halaman web ASP.NET (di mana biasanya tidak ada adaptor yang digunakan).

<browsers>  
    <browser refid="Default" >  
        <controlAdapters>  
            <adapter   
                controlType="System.Web.UI.Page"                              
                adapterType="Samples.AspNet.CS.MyPageAdapter" />  
        </controlAdapters>  
    </browser>  
</browsers>  

Keterangan

Permintaan dan respons HTTP secara inheren tanpa status. Untuk mempertahankan informasi status antara permintaan HTTP, halaman server ASP.NET dapat menyimpan Page status. Status ini, yang disebut status tampilan, terdiri dari pengaturan halaman dan kontrol serta data yang membuat halaman dan kontrol muncul seolah-olah mereka sama dengan yang dilihat dan berinteraksi dengan pengguna pada perjalanan pulang pergi terakhir mereka ke server. Beberapa mekanisme ada untuk menyimpan status tampilan antara permintaan berturut-turut ke halaman yang sama. Kelas abstrak PageStatePersister mewakili kelas dasar untuk mekanisme penyimpanan informasi status ini.

Mekanisme persistensi status tampilan default di ASP.NET adalah mempertahankan informasi status sebagai string yang dikodekan Base64 dalam elemen HTML tersembunyi (elemen dengan type atribut diatur ke "hidden") di halaman. Halaman ASP.NET menggunakan HiddenFieldPageStatePersister objek untuk melakukan pekerjaan ini, menggunakan IStateFormatter instans untuk membuat serialisasi dan mendeserialisasi informasi status objek. Secara bergantian, Anda dapat menyimpan status tampilan untuk halaman Anda di Session objek di server menggunakan SessionPageStatePersister kelas untuk klien seluler dengan bandwidth dan sumber daya terbatas. Dalam beberapa kasus, Anda mungkin menonaktifkan persistensi status tampilan sama sekali. Jika Anda melakukan ini, hasilnya adalah bahwa terkadang halaman dan kontrol yang mengandalkan persistensi status tidak bersifat benar. Untuk informasi selengkapnya tentang manajemen status halaman dan status tampilan, lihat Gambaran Umum Manajemen Status ASP.NET.

Jika Anda menulis kontrol, Anda dapat menyimpan informasi status untuk kontrol dalam ViewState kamus, yang merupakan StateBag objek. Pengembang akan mengambil status kontrol melalui ControlState properti . Anda menetapkan kunci dan nilai ke ViewState properti , dan objek menserialisasikan Page informasi status antar permintaan. Untuk melakukan penanganan status kustom dalam kontrol Anda, ganti LoadViewState metode dan SaveViewState . Informasi status apa pun yang disimpan dalam kamus ini hilang saat status tampilan dinonaktifkan oleh pengembang halaman. Untuk mengurangi hal ini, dalam ASP.NET versi 2.0 Anda dapat menyimpan informasi status penting dalam objek terpisah, yang disebut status kontrol. Objek status kontrol tidak terpengaruh ketika status tampilan dinonaktifkan oleh pengembang halaman. Menyimpan informasi status dalam objek status kontrol mengharuskan kontrol mengambil LoadControlState alih metode dan SaveControlState bahwa kontrol didaftarkan untuk menyimpan informasi status dalam status kontrol setiap kali kontrol diinisialisasi. Anda dapat mendaftarkan kontrol untuk menggunakan status kontrol dengan mengambil alih OnInit metode dan memanggil RegisterRequiresControlState metode . Untuk informasi selengkapnya tentang menggunakan ViewState properti dan status kontrol saat mengembangkan kontrol, lihat Mengembangkan Kontrol Server ASP.NET Kustom.

Untuk mempertahankan status tampilan pada klien yang tidak dapat mendukung mekanisme persistensi status tampilan yang ada, Anda dapat memperluas PageStatePersister kelas untuk memperkenalkan metode persistensi status tampilan Anda sendiri, dan Anda dapat menggunakan adaptor halaman untuk mengonfigurasi aplikasi ASP.NET Anda untuk menggunakan mekanisme persistensi status tampilan yang berbeda berdasarkan jenis klien tempat halaman dilayani. Kelas yang berasal dari PageStatePersister kelas harus mengambil alih metode abstrak Save untuk menyimpan status tampilan dan status kontrol dalam media persistensi, dan mengambil Load alih metode untuk mengekstraknya. Jika Anda perlu membuat serialisasi status tampilan dan status kontrol ke string, Anda dapat menggunakan IStateFormatter objek yang diakses menggunakan StateFormatter properti . Ini secara efisien menserialisasikan dan mendeserialisasi informasi status objek ke string yang dikodekan Base64. Anda juga dapat mengambil StateFormatter alih properti untuk menyediakan mekanisme serialisasi status objek Anda sendiri.

Konstruktor

PageStatePersister(Page)

Menginisialisasi instans baru kelas PageStatePersister.

Properti

ControlState

Mendapatkan atau mengatur objek yang mewakili data yang dikontrol oleh penggunaan objek saat ini Page untuk bertahan di seluruh permintaan HTTP ke server Web.

Page

Mendapatkan atau mengatur Page objek tempat mekanisme persistensi status tampilan dibuat.

StateFormatter

Mendapatkan objek yang digunakan untuk menserialisasikan IStateFormatter dan mendeserialisasi informasi status yang terkandung dalam ViewState properti dan ControlState selama panggilan ke Save() metode dan Load() .

ViewState

Mendapatkan atau mengatur objek yang mewakili data yang dikontrol oleh penggunaan objek saat ini Page untuk bertahan di seluruh permintaan HTTP ke server Web.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
Load()

Ditimpa oleh kelas turunan untuk mendeserialisasi dan memuat informasi status yang bertahan saat Page objek menginisialisasi hierarki kontrolnya.

MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
Save()

Ditimpa oleh kelas turunan untuk menserialisasikan informasi status yang bertahan saat Page objek dibongkar dari memori.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga