PRB: "estado de vista es no válido" Error Message When You Use Server.Transfer

Seleccione idioma Seleccione idioma
Id. de artículo: 316920 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando utiliza HttpServerUtility.Transfer ("page name", true), recibirá el siguiente mensaje de error:
El estado de vista no es válido para esta página y podría estar dañado

Causa

Este problema se produce porque el atributo EnableViewStateMac del <pages> elemento se establece en true de forma predeterminada. Cuando este atributo se establece en true , ASP.NET se ejecuta una comprobación de autenticación de mensajes (MAC) en el estado de vista de la página cuando la página se devuelve desde el cliente. Esta comprobación determina si el estado de vista de la página se ha modificado en el cliente. Por motivos de seguridad, se recomienda que conserve este atributo establecido en true .

Cuando llame al método Server.Transfer y establezca el segundo parámetro en true , se conservan la cadena de consulta y las colecciones de formularios . Uno de los campos de formulario es el campo de formulario oculto __VIEWSTATE, que contiene el estado de vista de la página. La autenticación de mensaje de estado de vista comprobar se produce un error porque la comprobación de autenticación de mensaje sólo comprueba cada página. Por lo tanto, el estado de vista de la página que llama a Server.Transfer no es válido en la página de destino.

Estado de vista es la página, ámbito y es válido para esa página sólo. Estado de vista no debe transferirse entre páginas.

Solución

Para resolver este problema, utilice uno de los métodos siguientes.

Resolución 1

Transferir valores entre páginas para pasar valores de control de su servidor a las otras páginas. Para obtener más información, consulte en la MSDN siguiente documentación:
Pasar valores de control de servidor entre páginas
http://msdn2.microsoft.com/en-us/library/6c3yckfw(vs.71).aspx
Esto requiere que se cree propiedades públicas para cada propiedad de un control que desea tener acceso desde la página de destino.

Si tiene muchos controles, y si desea obtener acceso a las propiedades de estos controles desde otra página, también puede declarar esos controles como las variables públicas. Por ejemplo:

Page1.aspx
Public Class Page1
    Public WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

    'Insert your code here.
End Class
				
Page2.aspx
            Dim sourcePage As Page1
            sourcePage = CType(Context.Handler, WebForm1)
            Response.Write(sourcePage.TextBox1.Text)
				

Resolución 2

No pase el segundo parámetro (que es false de forma predeterminada) al llamar a Server.Transfer . Por ejemplo:
Server.Transfer("<page name>")
				
este código no envía la cadena de consulta y campos de formulario a la página que se llama. Cuando no se transferirán datos, ASP.NET no se ejecuta la comprobación de autenticación de mensaje.

Más información

Pasos para reproducir el comportamiento

  1. Cree una página .aspx denominada WebForm1.aspx que transfiere la ejecución a otra página. Agregue el código siguiente a WebForm1.aspx:
    <%@ Page language="vb" AutoEventWireup="true" %>
    
    <html>  
      <body>	
        <form id="WebForm1" method="post" runat="server">
          <asp:TextBox id="txtName" runat="server">Your Name</asp:TextBox><br>
          <asp:Button id="Button1" runat="server" Text="Submit" OnClick="Button1_Click"></asp:Button>
        </form>	
      </body>
    </html>
    
    <script runat=server>
    Sub Button1_Click(sender As Object, e As System.EventArgs)
    	Server.Transfer("WebForm2.aspx",true)
    End Sub
    
    </script>
    					
  2. Cree otra página .aspx denominada WebForm2.aspx y, a continuación, agregue el código siguiente:
    <%@ Page language="vb" AutoEventWireup="true" %>
    
    <html>
      <body>	
        <form id="WebForm2" method="post" runat="server">
          <asp:Label id="lblName" runat="server" >Web Form 2</asp:Label>
        </form>
    	
      </body>
    </html>
    
    <script runat=server>
    Sub Page_Load(sender As Object, e As EventArgs)
    
    Dim thisPage As System.Web.UI.Page
    Dim nameTextBox As TextBox
    
    	thisPage = CType(Context.Handler, System.Web.UI.Page)
    	nameTextBox =  CType(thisPage.FindControl("txtName"), System.Web.UI.Control)
    
    	lblName.Text = "Your name is '" & nameTextBox.Text & "'."	
    	
    End Sub
    
    </script>
    					
  3. Abra WebForm1.aspx en el explorador y, a continuación, haga clic en Enviar .

Propiedades

Id. de artículo: 316920 - Última revisión: jueves, 19 de abril de 2007 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.0
Palabras clave: 
kbmt kbprb kbstate kbwebforms KB316920 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 316920
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com