JQuery Form Ajax提交Asp.Net表单时的验证视图状态 MAC 失败
2009-07-27 12:16 Johnny Qian 阅读(1344) 评论(0) 编辑 收藏 举报 //表单参数
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" >
不知道大家遇到这个问题没,如果有更好的办法,还请指教。
本文基于知识共享署名 2.5 中国大陆许可协议发布,欢迎转载、演绎或用于商业目的,但是必须保留本文的署名Johnny Qian和链接。