__VIEWSTATE是asp.net用来保持视图状态的一个隐藏字段。你可禁用一下页面的视图看看。

解决方案 »

  1.   

    禁用视图也会产生这个字段,只有把Form的runat=server去掉,才会不产生这个字段但是我又不能去掉runat=server难道asp.net与prototype不能共用吗?
      

  2.   

    有没有VIEWSTATE有影响吗?
    不管怎么生成都是html
      

  3.   

    对,我也是这么认为,但是问题是,有了VIEWSTATE,我的代码就运行不了
    没有,就可以运行。
      

  4.   

    你写一个文件测试就明白了.
    <%@ Page Language="C#" %><script type="text/javascript" src="prototype.js"></script>
    <script type="text/javascript">
        function test(){
             new Ajax.Request( 'p2.aspx',
              {
                method: 'post',
                postBody: $('logform').serialize(),
                onSuccess: function( transport ) {
                    alert(1);
                }
              });
            return false;
        }
    </script>
    <form id="Form1" runat="server">
        <input id="bt001" type="button" value="Click" onclick="test();" />
    </form>
      

  5.   

    我的代码就是上面这样的,我把form的runat=server删除,代码就正常工作,能alert(1)
    加上runat=server,就不能工作所以我才用我问题中的代码测试,发现是Viewstate的问题。请试试我那段代码就可以看到结果。
      

  6.   

    我测试没有问题.
    <%@ Page Language="C#" %>
    <script type="text/javascript" src="prototype-1.6.0.2.js"></script>
    <script type="text/javascript">
    function test(){
    new Ajax.Request('p2.aspx', {
    method:'post',
    postBody:'test1=1&test2=2',
    onSuccess:function(transport){
    alert('test');
    }
    });
    return false;
    }
    </script>
    <form id="Form1" runat="server">
    <input id="bt001" type="button" value="test" onclick="test();" />
    </form>
      

  7.   

    加上Ajax的onFailure: function(){ 
        document.write(arguments[0].responseText);
    },
    终于发现了原因,问题在postBody: $('logform').serialize(),这一句
    这句话把__VIEWSTATE编码进去了,然后传递到p2.aspx页面时,导致了这个错误:验证视图状态 MAC 失败所以始终不能正确弹出信息解决办法,不使用serialize,自己组装参数
    或者,在p2页面的Page里加上 enableEventValidation="false" enableViewStateMac="false"不管怎么样,谢谢大家了。