Aracılığıyla paylaş


PageStatePersister Sınıf

Tanım

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 StreamPageStatePersisterdö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)

Şunlara uygulanır

Ayrıca bkz.