PageStatePersister Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
ASP.NET görünüm durumu kalıcılık mekanizmaları için temel işlevsellik sağlar.
public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
- Devralma
-
PageStatePersister
- Türetilmiş
Örnekler
Aşağıdaki kod örneği, Web sunucusunda görünüm ve denetim durumunu kaydeden bir PageStatePersister nesnenin nasıl oluşturulacağını gösterir. , StreamPageStatePersister
görünüm durumu bilgilerini ayıklamak ve kaydetmek için ve Save yöntemlerinin nasıl geçersiz kılınduğunu Load gösterir. Durum kalıcılığı mekanizmaları uyarlamalı işleme ve istemci özellikleriyle ilişkili olduğundan, MyPageAdapter
sınıfı bir ASP.NET uygulaması için etkinleştirmek StreamPageStatePersister
üzere sağlanır. Son olarak, bağdaştırıcıyı belirli bir istemci sınıfına (bu örnekte varsayılan Web tarayıcısı) etkinleştirmek MyPageAdapter
için bir tarayıcı özellikleri (.browser) dosyası sağlanır.
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
Aşağıdaki kod örneği, bir PageAdapter ASP.NET Web sayfasının görünümünü ve durumunu kalıcı hale getirmek için kullanılan bir örneğini StreamPageStatePersister
döndüren bir sınıfın nasıl oluşturulacağını gösterir.
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
Aşağıdaki derleyici komut satırını kullanarak bu iki sınıfı bir örneği çalıştırmak için kullanabileceğiniz bir derlemede derleyin. Derlenen derlemenin ASP.NET uygulama kökü altındaki \Bin dizininde olduğundan emin olun.
// 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
'
Son olarak, bağdaştırıcıyı MyPageAdapter
etkinleştirmek için ASP.NET uygulama kökü altında Browsers adlı bir dizin oluşturmanız ve yapılandırma bilgilerini içeren bir .browser dosyası eklemeniz gerekir.
<refid>
Yapılandırma dosyasındaki öğesi, yapılandırmanın Default.browser yapılandırma dosyasında varsayılan tarayıcı için belirtilen değerleri geçersiz kıldığını gösterir. Bu örnekte, MyPageAdapter
ASP.NET Web sayfaları için kullanılır (normalde bağdaştırıcı kullanılmaz).
<browsers>
<browser refid="Default" >
<controlAdapters>
<adapter
controlType="System.Web.UI.Page"
adapterType="Samples.AspNet.CS.MyPageAdapter" />
</controlAdapters>
</browser>
</browsers>
Açıklamalar
HTTP istekleri ve yanıtları doğal olarak durum bilgisi yoktur. HTTP istekleri arasında durum bilgilerini korumak için ASP.NET sunucu sayfaları durumu depolayabilir Page . Görünüm durumu olarak adlandırılan bu durum, sayfa ve denetim ayarları ile sayfanın ve denetimlerin kullanıcının sunucuya son gidiş dönüşlerinde gördüğü ve etkileşimde olduğu gibi görünmesini sağlayan verilerden oluşur. Aynı sayfaya yapılan ardışık istekler arasında görünüm durumunu depolamak için çeşitli mekanizmalar vardır. Soyut PageStatePersister sınıf, bu durum bilgisi depolama mekanizmaları için temel sınıfı temsil eder.
ASP.NET'deki varsayılan görünüm durumu kalıcılık mekanizması, durum bilgilerini sayfada gizli bir HTML öğesinde (özniteliğinin ayarlandığı "hidden"
bir öğetype
) Base64 ile kodlanmış bir dize olarak tutmaktır. ASP.NET sayfası, bu işi gerçekleştirmek için bir HiddenFieldPageStatePersister nesne kullanır ve nesne durumu bilgilerini seri hale getirmek ve seri durumdan silmek için bir IStateFormatter örnek kullanır. Alternatif olarak, sınırlı bant genişliği ve kaynakları olan mobil istemciler için sınıfını SessionPageStatePersister kullanarak sayfalarınızın görünüm durumunu sunucudaki nesnede Session depolayabilirsiniz. Bazı durumlarda, görünüm durumu kalıcılığını tamamen devre dışı bırakabilirsiniz. Bunu yaparsanız, sonuç bazen durum kalıcılığına dayanan sayfaların ve denetimlerin düzgün davranmamasıdır. Sayfa durumu yönetimi ve görünüm durumu hakkında daha fazla bilgi için bkz. ASP.NET Durum Yönetimine Genel Bakış.
Denetim yazıyorsanız, denetimler için durum bilgilerini bir StateBag nesne olan sözlükte ViewState depolayabilirsiniz. Bir geliştirici, denetim durumunu özelliği aracılığıyla ControlState alır. Özelliğine ViewState anahtarlar ve değerler atarsınız ve Page nesnesi istekler arasındaki durum bilgilerini serileştirir. Denetiminizde özel durum işleme gerçekleştirmek için ve SaveViewState yöntemlerini geçersiz kılınLoadViewState. Görünüm durumu bir sayfa geliştiricisi tarafından devre dışı bırakıldığında bu sözlükte depolanan tüm durum bilgileri kaybolur. Bunu azaltmak için, ASP.NET sürüm 2.0'da kritik durum bilgilerini denetim durumu olarak adlandırılan ayrı bir nesnede depolayabilirsiniz. Görünüm durumu bir sayfa geliştiricisi tarafından devre dışı bırakıldığında denetim durumu nesnesi etkilenmez. Durum bilgilerini denetim durumu nesnesinde depolamak için denetimin ve SaveControlState yöntemlerini geçersiz kılması LoadControlState ve denetimin denetim her başlatıldığında durum bilgilerini denetim durumunda depolamak için kaydedilmesi gerekir. Yöntemini geçersiz kılıp OnInit yöntemini çağırarak RegisterRequiresControlState denetim durumunu kullanmak için bir denetimi kaydedebilirsiniz. Denetim geliştirirken özellik ve denetim durumunu kullanma ViewState hakkında daha fazla bilgi için bkz. Özel ASP.NET Sunucu Denetimleri Geliştirme.
Mevcut görünüm durumu kalıcılık mekanizmalarını desteklemeyen istemcilerde görünüm durumunu korumak için sınıfını PageStatePersister kendi görünüm durumu kalıcılık yöntemlerinizi tanıtacak şekilde genişletebilir ve sayfa bağdaştırıcılarını kullanarak ASP.NET uygulamanızı bir sayfanın sunulduğu istemci türüne göre farklı görünüm durumu kalıcılık mekanizmaları kullanacak şekilde yapılandırabilirsiniz. sınıfından PageStatePersister türetilen sınıflar, görünüm durumunu ve denetim durumunu kalıcılık medyasında depolamak için soyut Save yöntemi geçersiz kılmalı ve ayıklamak için yöntemini geçersiz kılmalıdır Load . Görünüm durumunu ve denetim durumunu bir dizeye seri hale getirmeniz gerekiyorsa, özelliği kullanılarak StateFormatter erişilen nesneyi kullanabilirsinizIStateFormatter. Nesne durumu bilgilerini Base64 ile kodlanmış bir dizeye verimli bir şekilde serileştirir ve seri durumdan çıkartır. Kendi nesne durumu serileştirme mekanizmanızı sağlamak için özelliğini de geçersiz kılabilirsiniz StateFormatter .
Oluşturucular
PageStatePersister(Page) |
PageStatePersister sınıfının yeni bir örneğini başlatır. |
Özellikler
ControlState |
Geçerli Page nesnenin içerdiği verileri temsil eden bir nesneyi alır veya ayarlar, Web sunucusuna yönelik HTTP isteklerinde kalıcı hale getirmek için kullanır. |
Page |
Görünüm durumu kalıcılık mekanizmasının oluşturulduğu nesneyi alır veya ayarlar Page . |
StateFormatter |
ve yöntemlerine yapılan çağrılar sırasında ve ControlState özelliklerinde yer alan durum bilgilerini seri hale getirmek ve seri durumdan ViewState çıkartmak için Load()Save() kullanılan bir IStateFormatter nesnesi alır. |
ViewState |
Geçerli Page nesnenin içerdiği verileri temsil eden bir nesneyi alır veya ayarlar, Web sunucusuna yönelik HTTP isteklerinde kalıcı hale getirmek için kullanır. |
Yöntemler
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
Load() |
Bir nesne denetim hiyerarşisini başlatırken Page kalıcı durum bilgilerini seri durumdan çıkarıp yüklemek için türetilmiş sınıflar tarafından geçersiz kılınabilir. |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
Save() |
Bir Page nesne bellekten kaldırıldığında kalıcı durum bilgilerini serileştirmek için türetilmiş sınıflar tarafından geçersiz kılınır. |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |