JQuery Form Ajax提交Asp.Net表單時的驗證視圖狀態 MAC 失敗

轉自:http://www.cnblogs.com/moneyriver2006/archive/2009/07/27/1531928.html

 

 

很簡單的一段代碼,就是不能提交
 //表單參數
var options = {
url:"article.aspx?action=add&time="+new Date().getMilliseconds(),
beforeSubmit: validate, // pre-submit callback
success: response, // post-submit callback
error: function() { alert("Ajax Submit Error!"); return false; }
};
//綁定Ajax提交到表單
$("#add_article").ajaxForm(options);
validate和response函數就不貼出來了。
服務器端返回的錯誤是: 驗證視圖狀態 MAC 失敗。

大概的原因,我猜想應該是jquery Form在Ajax提交之前使用使用serialize()方法將__VIEWSTATE編碼到序列中,導致 Post到服務器端時的視圖狀態 MAC 失敗。
有同學就會說,你可以讓頁面不生成__VIEWSTATE,這個方法確實可行。
在表單頁面禁用VIEWSTATE,頁面代碼中還是會有__VIEWSTATE,唯一的辦法是去掉 form的runat=server。
但是去掉 runat=server後表單中就不能使用ASP.NET控件了,比如常見的<asp:textbox>也不能使用。

可行的辦法有兩種:
1.客戶端的處理方法:
   在提交之前加上下面兩行代碼:
   $("#__VIEWSTATE").remove();
   $("#__EVENTVALIDATION").remove();
2.服務器端的處理方法
   在處理頁面關閉MAC視圖驗證:<%@ Page Language="C#"  enableViewStateMac="false" >

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章