PageStatePersister Classe

Definição

Fornece a funcionalidade básica para mecanismos de persistência de estado de exibição do ASP.NET.

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
Herança
PageStatePersister
Derivado

Exemplos

O exemplo de código a seguir demonstra como criar um PageStatePersister objeto que salva o estado de exibição e controle no servidor Web. Isso StreamPageStatePersister demonstra como substituir os Load métodos e Save extrair e salvar informações de estado de exibição. Como os mecanismos de persistência de estado estão relacionados à renderização adaptável e aos recursos do cliente, a MyPageAdapter classe é fornecida para ativar o StreamPageStatePersister aplicativo de ASP.NET. Por fim, um arquivo de funcionalidades do navegador (.browser) é fornecido para habilitar o MyPageAdapter adaptador para uma classe específica de clientes (nesse caso, o navegador da Web padrão).

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

O exemplo de código a seguir demonstra como criar uma PageAdapter classe da qual retorna uma instância, que é usada para manter o estado de StreamPageStatePersisterexibição e controle para uma página da 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

Compile essas duas classes em um assembly que você pode usar para executar um exemplo, usando a linha de comando do compilador a seguir. Verifique se o assembly compilado está no diretório \Bin sob a raiz do aplicativo 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
'

Por fim, para habilitar o MyPageAdapter adaptador, você deve criar um diretório chamado Navegadores sob a raiz do aplicativo ASP.NET e incluir um arquivo .browser com informações de configuração. O <refid> elemento no arquivo de configuração indica que a configuração substitui os valores especificados para o navegador padrão no arquivo de configuração Default.browser. Neste exemplo, MyPageAdapter é usado para ASP.NET páginas da Web (em que normalmente nenhum adaptador é usado).

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

Comentários

As solicitações HTTP e as respostas são inerentemente sem estado. Para manter informações de estado entre solicitações HTTP, ASP.NET páginas do servidor podem armazenar Page o estado. Esse estado, chamado de estado de exibição, consiste em configurações de página e controle e dados que fazem a página e os controles aparecerem como se fossem os mesmos que o usuário viu e interagiu em sua última viagem de ida e volta para o servidor. Existem vários mecanismos para armazenar o estado de exibição entre solicitações sucessivas na mesma página. A classe abstrata PageStatePersister representa a classe base para esses mecanismos de armazenamento de informações de estado.

O mecanismo de persistência de estado de exibição padrão no ASP.NET é manter as informações de estado como uma cadeia de caracteres codificada em Base64 em um elemento HTML oculto (um elemento com o type atributo definido como "hidden") na página. Uma página ASP.NET usa um HiddenFieldPageStatePersister objeto para executar esse trabalho, usando uma IStateFormatter instância para serializar e desserializar informações de estado do objeto. Como alternativa, você pode armazenar o estado de exibição de suas páginas no Session objeto no servidor usando a SessionPageStatePersister classe para clientes móveis com largura de banda e recursos limitados. Em alguns casos, você pode desabilitar completamente a persistência de estado de exibição. Se você fizer isso, o resultado é que, às vezes, páginas e controles que dependem da persistência de estado não se comportam corretamente. Para obter mais informações sobre o gerenciamento de estado da página e o estado de exibição, consulte ASP.NET Visão geral do Gerenciamento de Estado.

Se você estiver escrevendo controles, poderá armazenar informações de estado para os controles no ViewState dicionário, que é um StateBag objeto. Um desenvolvedor recuperaria o estado de controle por meio da ControlState propriedade. Você atribui chaves e valores à ViewState propriedade e o Page objeto serializa as informações de estado entre solicitações. Para executar o tratamento de estado personalizado em seu controle, substitua os métodos e SaveViewState os LoadViewState métodos. Todas as informações de estado armazenadas neste dicionário são perdidas quando o estado de exibição é desabilitado por um desenvolvedor de páginas. Para atenuar isso, no ASP.NET versão 2.0, você pode armazenar informações de estado críticas em um objeto separado, chamado estado de controle. O objeto de estado de controle não é afetado quando o estado de exibição é desabilitado por um desenvolvedor de página. Armazenar informações de estado no objeto de estado de controle requer que o controle substitua os métodos e SaveControlState os LoadControlState métodos e que o controle seja registrado para armazenar informações de estado no estado de controle sempre que o controle for inicializado. Você pode registrar um controle para usar o estado de controle substituindo o OnInit método e chamando o RegisterRequiresControlState método. Para obter mais informações sobre como usar a propriedade e o ViewState estado de controle ao desenvolver controles, consulte Desenvolvendo controles de servidor personalizados de ASP.NET.

Para manter o estado de exibição em clientes que não podem dar suporte aos mecanismos de persistência de estado de exibição existentes, você pode estender a PageStatePersister classe para introduzir seus próprios métodos de persistência de estado de exibição e usar adaptadores de página para configurar seu aplicativo ASP.NET para usar mecanismos de persistência de estado de exibição diferentes com base no tipo de cliente ao qual uma página é atendida. As classes que derivam da PageStatePersister classe devem substituir o método abstrato Save para armazenar o estado de exibição e o estado de controle no meio de persistência e substituir o Load método para extraí-lo. Se você precisar serializar o estado de exibição e controlar o estado em uma cadeia de caracteres, poderá usar o IStateFormatter objeto acessado usando a StateFormatter propriedade. Ele serializa e desserializa com eficiência as informações de estado do objeto para uma cadeia de caracteres codificada em Base64. Você também pode substituir a StateFormatter propriedade para fornecer seu próprio mecanismo de serialização de estado de objeto.

Construtores

PageStatePersister(Page)

Inicializa uma nova instância da classe PageStatePersister.

Propriedades

ControlState

Obtém ou define um objeto que representa os dados que controla, contidos pelo objeto Page atual que usa para persistir em solicitações HTTP ao servidor Web.

Page

Obtém ou define o objeto Page para o qual o mecanismo de persistência de estado de exibição é criado.

StateFormatter

Obtém um objeto IStateFormatter que é usado para serializar e desserializar as informações de estado contidas nas propriedades ViewState e ControlState durante as chamadas aos métodos Save() e Load().

ViewState

Obtém ou define um objeto que representa os dados que controla, contidos pelo objeto Page atual que usa para persistir em solicitações HTTP ao servidor Web.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
Load()

Substituído por classes derivadas para desserializar e carregar as informações de estado persistente quando um objeto Page inicializa sua hierarquia de controle.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Save()

Substituído por classes derivadas para serializar informações de estado persistente quando um objeto Page é descarregado da memória.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também