PROBLEMA: "View State É inválida" mensagem de erro ao usar Server.Transfer

Traduções deste artigo Traduções deste artigo
ID do artigo: 316920 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você usa HttpServerUtility.Transfer ("page name", true), você receber a seguinte mensagem de erro:
O estado de exibição é inválido para esta página e pode estar corrompido

Causa

Esse problema ocorre porque o atributo EnableViewStateMac do <pages> elemento estiver definido como true por padrão. Quando esse atributo é definido como true , ASP.NET executa uma verificação de autenticação de mensagem (MAC) no estado de exibição da página quando a página é remetida novamente do cliente. Esta seleção determina se o estado de exibição da página foi modificado no cliente. Para fins de segurança, é recomendável que você mantenha este atributo definido como true .

Quando você chama o método Server.Transfer e define o segundo parâmetro para true , preservar QueryString e as coleções de formulário . Um dos campos de formulário é o campo de formulário oculto __VIEWSTATE, que mantém o estado de exibição para a página. A autenticação de mensagem de estado do modo de exibição verificar falha porque a verificação de autenticação de mensagem somente verifica cada página. Portanto, o estado de exibição da página que chama o Server.Transfer não é válido na página de destino.

Estado de exibição é o escopo de página e é válido para essa página somente. Estado de exibição não deve ser transferido entre páginas.

Resolução

Para resolver esse problema, use um dos seguintes métodos.

Resolução 1

Transferir valores entre páginas para passar valores de controle de seu servidor para outras páginas. Para obter mais informações, consulte MSDN seguinte documentação:
Valores de controle do servidor de passagem entre páginas
http://msdn2.microsoft.com/en-us/library/6c3yckfw(vs.71).aspx
Isso exige que você crie propriedades públicas para cada propriedade de um controle que você deseja acessar da página de destino.

Se você tiver muitos controles, e se você deseja acessar as propriedades desses controles de outra página, você também pode declarar esses controles como variáveis públicas. Por exemplo:

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)
				

Resolução 2

Não passar o segundo parâmetro (que é false por padrão) quando você chamar Server.Transfer . Por exemplo:
Server.Transfer("<page name>")
				
este código não envia QueryString e os campos de formulário para a página que é chamada. Quando nenhum dado é transferido, o ASP.NET não executa a verificação de autenticação de mensagem.

Mais Informações

Passos para reproduzir o problema

  1. Crie uma página .aspx chamada WebForm1.aspx transfere a execução para outra página. Adicione o seguinte código ao 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. Crie outra página .aspx chamada WebForm2.aspx e adicione o código a seguir:
    <%@ 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 no seu navegador e em seguida, clique em Enviar .

Propriedades

ID do artigo: 316920 - Última revisão: quinta-feira, 19 de abril de 2007 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.0
Palavras-chave: 
kbmt kbprb kbstate kbwebforms KB316920 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 316920
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

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