2011-06-16 52 views
0

我編寫了一個調用WebMethod進行身份驗證的登錄表單。這部分工作正常。如何使用Javascript將控制權轉移到ASPX頁面

如果用戶已通過身份驗證,我想使用javascript將控件轉移到另一個表單。以下是我的代碼:

  var f = document.getElementById("form1"); 
      f.action = "http://localhost/demo/WebForm2.aspx"; 
      f.method = "POST"; 
      f.submit(); 

我得到以下異常:

[ViewStateException: Invalid viewstate. 
Client IP: 127.0.0.1 
Port: 2614 
Referer: http://localhost/demo/authenticate.aspx 
Path: /demo/WebForm2.aspx 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
ViewState: /wEPDwUJNzgzNDMwNTMzZGRVwSzsPTf15ks/Fy9lgs6EmnjDEeWgjaAnQ01MZDLGJg==] 

任何人知道我在做什麼錯?

+0

你是什麼意思「傳輸控制」 – 2011-06-16 03:32:11

+0

你的JavaScript對我來說看起來不錯,假設你確實有一個叫做「form1」的窗體等等。 – nnnnnn 2011-06-16 04:05:07

回答

2

發生該錯誤是因爲接收回發的頁面試圖使用Viewstate數據來填充頁面的屬性,但它是無效的,因爲視圖狀態是由另一個頁面創建的。

如果沒有必要,您可以禁用視圖狀態,這將解決您的問題。

private void Page_Init(object sender, System.EventArgs e) 
{ 
    ... 

    this.EnableViewState = false; 

    ... 
} 

這會讓你自己處理表單提交的變量,而不是頁面的變量通過視圖狀態數據被填充,像往常一樣在asp.net回發。

編輯:

viewstate是代表你的頁面狀態時,它呈現前系列化的數據。將數據發佈回服務器後,填充頁面中的屬性非常有用,因此,當您訪問這些屬性時,看起來您並不在客戶端 - 服務器環境中工作。 Viewstate是一堆其他內部asp.net體系結構中的一個可怕的黑客攻擊。你應該小心viewstate,因爲如果你在asp.net頁面類中設置了很多屬性,它會像地獄一樣增加開銷。

+0

這樣做!非常感謝你。我一直在爲此奮鬥一整天。再次,謝謝。 – Robert 2011-06-17 04:46:47

+0

很高興幫助!但你應該將答案標記爲已接受;) – 2011-06-17 10:10:50

相關問題