PageStatePersister Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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) |