PRB: "Προβολή κατάσταση δεν είναι έγκυρη" μήνυμα λάθους όταν χρησιμοποιείτε Server.Transfer

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 316920 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Όταν χρησιμοποιείτε το HttpServerUtility.Transfer ("σελίδα όνομα", TRUE), λαμβάνετε το ακόλουθο μήνυμα λάθους:
Κατάσταση προβολής δεν είναι έγκυρη για αυτήν τη σελίδα και μπορεί να κατεστραμμένο

Αιτία

Αυτό το ζήτημα παρουσιάζεται επειδή το EnableViewStateMac χαρακτηριστικό του <pages></pages> το στοιχείο έχει οριστεί σε TRUE από προεπιλογή. Όταν αυτό το χαρακτηριστικό έχει οριστεί σε TRUEASP.NET εκτελείται ένα μήνυμα ελέγχου ταυτότητας (MAC) στην προβολή η κατάσταση της σελίδας όταν καταχωρείται η σελίδα πίσω από το πρόγραμμα-πελάτη. Αυτός ο έλεγχος Καθορίζει εάν η κατάσταση προβολής της σελίδας τροποποίησης του υπολογιστή-πελάτη. Για λόγους ασφαλείας, συνιστάται να διατηρείτε σε αυτό το σύνολο χαρακτηριστικών TRUE.

Όταν καλείτε το Server.Transfer η μέθοδος και η δεύτερη παράμετρος TRUE, μπορείτε να διατηρήσετε το QueryString και το Φόρμα συλλογές. Ένα από τα πεδία φόρμας είναι κρυφό __VIEWSTATE πεδίο φόρμας, το οποίο διατηρεί την κατάσταση προβολής της σελίδας. Προβολή κατάστασης μηνύματος έλεγχος ταυτότητας αποτυγχάνει επειδή ο έλεγχος ταυτότητας μηνυμάτων ελέγχει μόνο ελέγχους κάθε σελίδα. Επομένως, η κατάσταση προβολής από τη σελίδα που καλεί Server.Transfer δεν είναι έγκυρη στη σελίδα προορισμού.

Προβολή κατάστασης είναι σελίδα στοχεύουν και είναι έγκυρη για αυτήν τη σελίδα μόνο. Κατάσταση προβολής πρέπει να είναι μεταφέρονται σε σελίδες.

Προτεινόμενη αντιμετώπιση

Για να επιλύσετε αυτό το ζήτημα, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους.

Προτεινόμενη αντιμετώπιση 1

Μεταφέρετε τιμές μεταξύ σελίδων για να μεταβιβάσετε το διακομιστή ελέγχου τιμές σε άλλες σελίδες. Για περισσότερες πληροφορίες, ανατρέξτε παρακάτω MSDN τεκμηρίωση:
Μεταβίβαση ελέγχου διακομιστή τιμές μεταξύ σελίδων
.aspx http://msdn2.Microsoft.com/en-us/library/6c3yckfw (vs.71)
Αυτό απαιτεί να δημιουργήσετε δημόσιες ιδιότητες για κάθε ιδιότητα από ένα στοιχείο ελέγχου που θέλετε να έχετε πρόσβαση από τη σελίδα προορισμού.

Εάν έχετε πολλά στοιχεία ελέγχου και θέλετε να αποκτήσετε πρόσβαση στις ιδιότητες αυτές στοιχεία ελέγχου από μια άλλη σελίδα, μπορείτε να δηλώσετε επίσης αυτά τα στοιχεία ελέγχου ως δημόσια μεταβλητές. Για παράδειγμα:

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)
				

Προτεινόμενη αντιμετώπιση 2

Δεν περάσουν τη δεύτερη παράμετρο (το οποίο είναι FALSE από προεπιλογή) κατά την κλήση Server.Transfer. Για παράδειγμα:
Server.Transfer("<page name>")
				
Αυτός ο κωδικός αποστολής του QueryString και το Φόρμα πεδία στη σελίδα που ονομάζεται. Όταν δεν υπάρχουν δεδομένα μεταφέρονται, ASP.NET εκτελεστεί ο έλεγχος ταυτότητας μηνυμάτων.

Περισσότερες πληροφορίες

Βήματα για την αναπαραγωγή της συμπεριφοράς

  1. Δημιουργήστε μια σελίδα .aspx με το όνομα αρχείο WebForm1.aspx που μεταφέρει εκτέλεση σε άλλη σελίδα. Προσθέστε τον ακόλουθο κώδικα στο αρχείο 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. Δημιουργήστε μια άλλη σελίδα .aspx με το όνομα WebForm2.aspx και στη συνέχεια να προσθέσετε ο παρακάτω κώδικας:
    <%@ 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. Ανοίξτε το αρχείο WebForm1.aspx στο πρόγραμμα περιήγησης και στη συνέχεια κάντε κλικ στο κουμπί Υποβολή.

Ιδιότητες

Αναγν. άρθρου: 316920 - Τελευταία αναθεώρηση: Κυριακή, 29 Μαΐου 2011 - Αναθεώρηση: 4.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft ASP.NET 1.0
Λέξεις-κλειδιά: 
kbprb kbstate kbwebforms kbmt KB316920 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:316920
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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