JQuery Form Ajax提交asp.net表單時失敗
Ajax提交asp.net表單問題描述:很簡單的一段代碼,就是不能提交
- //表單參數(shù)
- 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函數(shù)就不貼出來了。
服務(wù)器端返回的錯誤是: 驗證視圖狀態(tài) MAC 失敗。
Ajax提交asp.net表單問題分析
大概的原因,我猜想應(yīng)該是jquery Form在Ajax提交之前使用使用serialize()方法將__VIEWSTATE編碼到序列中,導(dǎo)致Post到服務(wù)器端時的視圖狀態(tài) MAC 失敗。
有同學(xué)就會說,你可以讓頁面不生成__VIEWSTATE,這個方法確實可行。
在表單頁面禁用VIEWSTATE,頁面代碼中還是會有__VIEWSTATE,***的辦法是去掉form的runat=server。
但是去掉runat=server后表單中就不能使用asp.net控件了,比如常見的< asp:textbox>也不能使用。
可行的辦法有兩種:
1.客戶端的處理方法:
在提交之前加上下面兩行代碼:
- $("#__VIEWSTATE").remove();
- $("#__EVENTVALIDATION").remove();
2.服務(wù)器端的處理方法
在處理頁面關(guān)閉MAC視圖驗證:
- < %@ Page Language="C#" enableViewStateMac="false" >
本人是這樣解決JQuery Form Ajax提交asp.net表單時失敗的問題的。不知道大家遇到這個問題沒,如果有更好的辦法,還請指教。
【編輯推薦】