PRB: "lihat negara tidak sah" pesan galat ketika Anda menggunakan Server.Transfer

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 316920 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika Anda menggunakan HttpServerUtility.Transfer ("Halaman Nama", True), Anda menerima pesan galat berikut:
Lihat negara tidak sah untuk Halaman ini dan mungkin rusak

PENYEBAB

Masalah ini terjadi karena EnableViewStateMac atribut <pages></pages> elemen diatur ke benar secara default. Ketika atribut ini diatur ke benarASP.NET menjalankan pemeriksaan otentikasi pesan (MAC) pada tampilan keadaan halaman ketika halaman dikirim kembali dari klien. Cek ini menentukan jika keadaan lihat halaman diubah pada klien. Untuk Keamanan tujuan, dianjurkan bahwa Anda menyimpan atribut ini diatur ke benar.

Kapan Anda menelpon Server.transfer metode dan menetapkan parameter kedua ke benar, Anda mempertahankan QueryString dan Bentuk Koleksi. Salah satu kolom formulir adalah __VIEWSTATE tersembunyi bentuk lapangan, yang memegang pandangan negara untuk halaman. Lihat negara pesan cek otentikasi gagal karena otentikasi pesan memeriksa hanya cek setiap halaman. Oleh karena itu, lihat negara bagian dari halaman yang panggilan Server.transfer ini tidak berlaku pada halaman tujuan.

Lihat negara Halaman scoped dan berlaku untuk halaman hanya. Lihat negara tidak boleh ditransfer di laman.

PEMECAHAN MASALAH

Untuk menyelesaikan masalah ini, gunakan salah satu metode berikut.

Resolusi 1

Nilai-nilai transfer antara halaman untuk lulus server Anda kontrol nilai ke halaman lain. Untuk informasi lebih lanjut, lihat MSDN berikut Dokumentasi:
Nilai-nilai Server kontrol lewat antara halaman
.aspx http://msdn2.Microsoft.com/en-us/library/6c3yckfw (vs.71)
Ini memerlukan bahwa Anda membuat properti umum untuk setiap properti kontrol yang ingin Anda akses dari halaman tujuan.

Jika Anda memiliki banyak kontrol, dan jika Anda ingin mengakses properti ini kontrol dari halaman lain, Anda juga dapat mendeklarasikan mereka kontrol sebagai publik variabel. Misalnya:

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)
				

Resolusi 2

Tidak lulus parameter kedua (yang palsu secara default) ketika Anda menelepon Server.transfer. Misalnya:
Server.Transfer("<page name>")
				
Kode ini mengirim QueryString dan Bentuk bidang ke halaman yang disebut. Ketika tidak ada data yang ditransfer, ASP.NET tidak berjalan cek otentikasi pesan.

INFORMASI LEBIH LANJUT

Langkah-Langkah untuk Mereproduksi Perilaku

  1. Membuat halaman .aspx yang bernama WebForm1.aspx yang transfer eksekusi ke halaman lain. Tambahkan kode berikut untuk 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. Membuat halaman .aspx lain yang bernama WebForm2.aspx, dan kemudian menambahkan kode berikut:
    <%@ 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. Buka WebForm1.aspx di peramban, dan kemudian klik Kirim.

Properti

ID Artikel: 316920 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft ASP.NET 1.0
Kata kunci: 
kbprb kbstate kbwebforms kbmt KB316920 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:316920
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

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