PRB: Messaggio di errore "Valore di ViewState non valido" quando si utilizza Server.Transfer

Traduzione articoli Traduzione articoli
Identificativo articolo: 316920 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si utilizza HttpServerUtility.Transfer("nome pagina", true), viene visualizzato un messaggio di errore analogo al seguente:
Valore di ViewState non valido per la pagina e probabilmente danneggiato.

Cause

Questo problema si verifica perchÚ per impostazione predefinita l'attributo EnableViewStateMac dell'elemento <pages> Ŕ impostato su true. Quando questo attributo Ŕ impostato su true, in ASP.NET viene eseguito un controllo di autenticazione messaggi (MAC, Message Authentication Check) sullo stato di visualizzazione della pagina quando viene eseguito il postback della pagina dal client. Questo controllo determina se lo stato di visualizzazione della pagina Ŕ stato modificato nel client. Per ragioni di protezione, si consiglia di lasciare questo attributo impostato su true.

Quando si chiama il metodo Server.Transfer e si imposta il secondo parametro su true, si conservano gli insiemi QueryString e Form. Uno dei campi del form Ŕ il campo nascosto __VIEWSTATE, che contiene lo stato di visualizzazione relativo alla pagina. Il controllo di autenticazione messaggi dello stato di visualizzazione ha esito negativo perchÚ viene solo controllata ogni pagina. Lo stato di visualizzazione della pagina che chiama Server.Transfer non Ŕ pertanto valido nella pagina di destinazione.

Lo stato di visualizzazione rientra nell'ambito della pagina ed Ŕ valido solo per tale pagina. ╚ consigliabile non trasferire da una pagina all'altra lo stato di visualizzazione.

Risoluzione

Per risolvere il problema, utilizzare uno dei metodi descritti di seguito.

Risoluzione 1

Trasferire i valori tra le pagine per passare i valori di controllo del server alle altre pagine. Per ulteriori informazioni, fare riferimento alla documentazione di MSDN (informazioni in lingua inglese):
Passaggio di valori di controllo del server tra le pagine
http://msdn2.microsoft.com/en-us/library/6c3yckfw(vs.71).aspx
Per questa operazione Ŕ necessario creare proprietÓ pubbliche per ogni proprietÓ di un controllo a cui si desidera accedere dalla pagina di destinazione.

Se si dispone di pi¨ controlli e si desidera accedere alle proprietÓ di questi controlli da un'altra pagina, Ŕ inoltre possibile dichiarare tali controlli come variabili pubbliche. Ad esempio:

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)
				

Risoluzione 2

Non passare il secondo parametro (per impostazione predefinita, false) quando si chiama Server.Transfer. Ad esempio:
Server.Transfer("<page name>")
				
Questo codice non invia i campi QueryString e Form alla pagina chiamata. Quando non viene trasferito alcun dato, in ASP.NET non viene eseguito il controllo di autenticazione messaggi.

Informazioni

Procedura per riprodurre il problema

  1. Creare una pagina aspx denominata WebForm1.aspx che trasferisce l'esecuzione a un'altra pagina. Aggiungere il codice seguente 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. Creare un'altra pagina aspx denominata WebForm2.aspx e quindi aggiungere il codice seguente:
    <%@ 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. Aprire WebForm1.aspx nel browser e quindi fare clic su Invia.

ProprietÓ

Identificativo articolo: 316920 - Ultima modifica: venerdý 15 giugno 2007 - Revisione: 3.2
Le informazioni in questo articolo si applicano a:
  • Microsoft ASP.NET 1.0
Chiavi:á
kbprb kbstate kbwebforms KB316920
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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