When you use HttpServerUtility.Transfer("
page
name", true), you receive the following error message:
The View State is invalid for this page and might be
corrupted
This problem occurs because the
EnableViewStateMac attribute of the
<pages> element is set to
true by default. When this attribute is set to
true, ASP.NET runs a message authentication check (MAC) on the view
state of the page when the page is posted back from the client. This check
determines if the view state of the page was modified on the client. For
security purposes, it is recommended that you keep this attribute set to
true.
When you call the
Server.Transfer method and set the second parameter to
true, you preserve the
QueryString and the
Form collections. One of the form fields is the hidden __VIEWSTATE
form field, which holds the view state for the page. The view state message
authentication check fails because the message authentication check only checks
each page. Therefore, the view state from the page that calls
Server.Transfer is not valid on the destination page.
View state is
page scoped and is valid for that page only. View state should not be
transferred across pages.
To resolve this problem, use one of the following methods.
Resolution 1
Transfer values between pages to pass your server control values
to the other pages. For more information, refer to the following MSDN
documentation:
This requires that you create public properties for each property
of a control that you want to access from the destination page.
If
you have many controls, and if you want to access the properties of these
controls from another page, you can also declare those controls as public
variables. For example:
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)
Resolution 2
Do not pass the second parameter (which is
false by default) when you call
Server.Transfer. For example:
Server.Transfer("<page name>")
This code does not send the
QueryString and the
Form fields to the page that is called. When no data is transferred,
ASP.NET does not run the message authentication check.