PageStatePersister Clase

Definición

Proporciona la funcionalidad básica para los mecanismos de persistencia del estado de vista de ASP.NET.

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
Herencia
PageStatePersister
Derivado

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un objeto que guarda el PageStatePersister estado de vista y control en el servidor web. Muestra StreamPageStatePersister cómo invalidar los Load métodos y Save para extraer y guardar información de estado de vista. Dado que los mecanismos de persistencia de estado están relacionados con la representación adaptable y las funcionalidades de cliente, la MyPageAdapter clase se proporciona para activar para StreamPageStatePersister una aplicación de ASP.NET. Por último, se proporciona un archivo de funcionalidades del explorador (.browser) para habilitar el MyPageAdapter adaptador para una clase específica de clientes (en este caso, el explorador web predeterminado).

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

En el ejemplo de código siguiente se muestra cómo crear una PageAdapter clase que devuelve una instancia de StreamPageStatePersister, que se usa para conservar el estado de vista y control de una página web de 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 estas dos clases en un ensamblado que puede usar para ejecutar un ejemplo mediante la siguiente línea de comandos del compilador. Asegúrese de que el ensamblado compilado está en el directorio \Bin debajo de la raíz de la aplicación 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 último, para habilitar el MyPageAdapter adaptador, debe crear un directorio denominado Exploradores debajo de la raíz de la aplicación ASP.NET e incluir un archivo .browser con información de configuración. El <refid> elemento del archivo de configuración indica que la configuración invalida los valores especificados para el explorador predeterminado en el archivo de configuración Default.browser. En este ejemplo, MyPageAdapter se usa para ASP.NET páginas web (donde normalmente no se usa ningún adaptador).

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

Comentarios

Las solicitudes y respuestas HTTP no tienen estado inherentemente. Para mantener la información de estado entre las solicitudes HTTP, ASP.NET páginas del servidor pueden almacenar Page el estado. Este estado, denominado estado de vista, consta de la configuración de página y control y los datos que hacen que la página y los controles aparezcan como si fueran los mismos que el usuario vio e interactúó en su último recorrido de ida y vuelta al servidor. Existen varios mecanismos para almacenar el estado de vista entre las solicitudes sucesivas a la misma página. La clase abstracta PageStatePersister representa la clase base para estos mecanismos de almacenamiento de información de estado.

El mecanismo de persistencia de estado de vista predeterminado en ASP.NET es mantener la información de estado como una cadena codificada en Base64 en un elemento HTML oculto (un elemento con el type atributo establecido "hidden"en ) en la página. Una página de ASP.NET usa un HiddenFieldPageStatePersister objeto para realizar este trabajo, mediante una IStateFormatter instancia de para serializar y deserializar la información de estado del objeto. Como alternativa, puede almacenar el estado de vista de las páginas en el Session objeto en el servidor mediante la SessionPageStatePersister clase para clientes móviles con ancho de banda y recursos limitados. En algunos casos, puede deshabilitar la persistencia de estado de vista por completo. Si lo hace, el resultado es que a veces las páginas y los controles que dependen de la persistencia del estado no se comportan correctamente. Para obtener más información sobre la administración de estados de página y el estado de vista, consulte ASP.NET Información general sobre la administración de estado.

Si está escribiendo controles, puede almacenar información de estado de los controles en el ViewState diccionario, que es un StateBag objeto . Un desarrollador recuperaría el estado de control a través de la ControlState propiedad . Asigne claves y valores a la ViewState propiedad y el Page objeto serializa la información de estado entre las solicitudes. Para realizar el control de estado personalizado en el control, invalide los LoadViewState métodos y SaveViewState . Cualquier información de estado almacenada en este diccionario se pierde cuando un desarrollador de páginas deshabilita el estado de vista. Para mitigar esto, en ASP.NET versión 2.0 puede almacenar información de estado crítica en un objeto independiente, denominado estado de control. El objeto de estado de control no se ve afectado cuando un desarrollador de páginas deshabilita el estado de vista. El almacenamiento de información de estado en el objeto de estado de control requiere que el control invalide los LoadControlState métodos y SaveControlState y que el control se registre para almacenar información de estado en estado de control cada vez que se inicializa el control. Puede registrar un control para usar el estado de control reemplazando el OnInit método y llamando al RegisterRequiresControlState método . Para obtener más información sobre el uso de la propiedad y el ViewState estado de control al desarrollar controles, vea Developing Custom ASP.NET Server Controls.

Para mantener el estado de vista en los clientes que no admiten los mecanismos de persistencia de estado de vista existentes, puede ampliar la PageStatePersister clase para introducir sus propios métodos de persistencia de estado de vista y puede usar adaptadores de página para configurar la aplicación de ASP.NET para usar diferentes mecanismos de persistencia de estado de vista basados en el tipo de cliente al que se sirve una página. Las clases que derivan de la PageStatePersister clase deben invalidar el método abstracto Save para almacenar el estado de vista y el estado de control en el medio de persistencia e invalidar el Load método para extraerlo. Si necesita serializar el estado de vista y el estado de control en una cadena, puede usar el IStateFormatter objeto al que se tiene acceso mediante la StateFormatter propiedad . Serializa y deserializa eficazmente la información de estado del objeto en una cadena codificada en Base64. También puede invalidar la StateFormatter propiedad para proporcionar su propio mecanismo de serialización de estado de objeto.

Constructores

PageStatePersister(Page)

Inicializa una nueva instancia de la clase PageStatePersister.

Propiedades

ControlState

Obtiene o establece un objeto que representa los datos que los controles incluidos en el objeto Page actual utilizan para conservarse a lo largo de las distintas solicitudes HTTP al servidor Web.

Page

Obtiene o establece el objeto Page para el que se crea el mecanismo de persistencia del estado de vista.

StateFormatter

Obtiene un objeto IStateFormatter que se utiliza para serializar y deserializar la información de estado incluida en las propiedades ViewState y ControlState durante las llamadas a los métodos Save() y Load().

ViewState

Obtiene o establece un objeto que representa los datos que los controles incluidos en el objeto Page actual utilizan para conservarse a lo largo de las distintas solicitudes HTTP al servidor Web.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
Load()

Este miembro se reemplaza por clases derivadas para deserializar y cargar la información de estado guardada cuando un objeto Page inicializa su jerarquía de controles.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
Save()

Este miembro se reemplaza por clases derivadas para serializar la información de estado guardada cuando un objeto Page se descarga de la memoria.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también