Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

PRB: "xem trạng thái không hợp lệ" thông báo lỗi khi bạn sử dụng Server.Transfer

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:316920
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài viết này nói về các sản phẩm mà Microsoft không còn hỗ trợ nữa. Do đó, bài viết này được cung cấp "nguyên bản" và sẽ không được cập nhật.
TRIỆU CHỨNG
Khi bạn sử dụng HttpServerUtility.Transfer ("Trang Tên", True), bạn nhận được thông báo lỗi sau:
Xem trạng thái không hợp lệ cho Trang này và có thể hỏng
NGUYÊN NHÂN
Vấn đề này xảy ra bởi vì các EnableViewStateMac thuộc tính của các <pages></pages> nguyên tố được thiết lập để sự thật Theo mặc định. Khi thuộc tính này được thiết lập để sự thậtASP.NET chạy một kiểm tra thư xác thực (MAC) trên quan điểm trạng thái trang khi trang được đăng trở lại từ các khách hàng. Kiểm tra này xác định nếu bang xem trang đổi lần trên máy khách. Cho mục đích bảo mật, nó được khuyến khích là bạn giữ này thuộc tính thiết lập để sự thật.

Khi bạn gọi các Server.Transfer phương pháp và đặt tham số thứ hai sự thật, bạn bảo vệ các QueryString và các Hình thức các bộ sưu tập. Một trong các trường mẫu là __VIEWSTATE ẩn trường mẫu, giữ chức nhà nước xem cho trang. Xem trạng thái thư kiểm tra xác thực thất bại vì việc xác thực thư kiểm tra chỉ kiểm tra mỗi trang. Do đó, nhà nước xem từ trang mà các cuộc gọi Server.Transfer là không hợp lệ trên trang đích.

Xem trạng thái là Trang scoped và hợp lệ cho trang đó. Xem trạng thái không nên chuyển qua các trang.
GIẢI PHÁP
Để giải quyết vấn đề này, sử dụng một trong những phương pháp sau đây.

Độ phân giải 1

Các giá trị chuyển giao giữa các trang để vượt qua máy chủ của bạn kiểm soát giá trị đến các trang khác. Để biết thêm thông tin, tham khảo MSDN sau tài liệu:
Đi qua kiểm soát máy chủ các giá trị giữa các trang
http://msdn2.Microsoft.com/en-US/Library/6c3yckfw (vs.71) .aspx
Điều này đòi hỏi rằng bạn tạo ra các tài sản công cộng cho mỗi tài sản kiểm soát bạn muốn truy cập từ trang đích.

Nếu bạn có nhiều điều khiển, và nếu bạn muốn truy cập các thuộc tính này điều khiển từ một trang khác, bạn cũng có thể tuyên bố những điều khiển như công cộng các biến. Ví dụ:

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)				

Độ phân giải 2

Không vượt qua các tham số thứ hai (được sai Theo mặc định) khi bạn gọi Server.Transfer. Ví dụ:
Server.Transfer("<page name>")				
Mã này không gửi các QueryString và các Hình thức các lĩnh vực đến trang đó được gọi là. Khi không có dữ liệu được chuyển giao, ASP.NET không chạy kiểm tra thư xác thực.
THÔNG TIN THÊM

Các bước để tạo lại hành vi

  1. Tạo một trang .aspx đặt tên là WebForm1.aspx truyền thực hiện đến một trang khác. Thêm mã sau đây để 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. Tạo một trang .aspx đặt tên WebForm2.aspx, và sau đó thêm các mã sau đây:
    <%@ 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.PageDim 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. Mở WebForm1.aspx trong trình duyệt của bạn, và sau đó nhấp vào Gửi.
ViewState

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 316920 - Xem lại Lần cuối: 08/27/2011 21:17:00 - Bản sửa đổi: 2.0

Microsoft ASP.NET 1.0

  • kbprb kbstate kbwebforms kbmt KB316920 KbMtvi
Phản hồi
>