页面A有一GridView控件gv_A,内有ButtonField链接到页面B,页面B有一GridView控件gv_B,根据页面A传递的参数来绑定数据.此时如果在gv_B中触发任何控件事件如RowDeleting则会抛出"验证视图状态 MAC 失败"的错误.错误提示全文如下:验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。------------------------------------------------------------------------------------------我在网上查过的相关解决办法都没有用,问题依旧,该怎么解决或者是避过这个错误呢?先谢过将要热心回答的各位.

解决方案 »

  1.   

    ASP.Net的 runat='server' 会对ViewStat进行MAC的加密,使得提交数据时只能对同一页面进行。 
    1 在接收页加上 @ page EnableViewStateMac="false" 
    或者 enableEventValidation="false" viewStateEncryptionMode ="Never"  
    也可以在web.config的节点里加入:
    <system.web>
        <pages  enableEventValidation="false" viewStateEncryptionMode="Never" />
    </system.web>
    2 配置matchineKey
    <system.web>
        <machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" 
    decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" decryption="3DES"/>
    </system.web>
    http://www.cnblogs.com/sephil/archive/2008/03/15/930679.html
      

  2.   

    通过在Web.config里边添加   
        
      <pages   enableEventValidation="false"   viewStateEncryptionMode   ="Never"   />  
    在页面的Page   指令中添加   EnableViewStateMac="false"属性如下:<%@   Page   EnableViewStateMac="false"%>.
      

  3.   

    在页面A页面B中都把EnableViewState="false"
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="A.aspx.cs" Inherits="A"  EnableViewState="false"  %>
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="A.aspx.cs" Inherits="B"  EnableViewState="false"  %>

    <system.web> 
        <pages  enableEventValidation="false" viewStateEncryptionMode="Never" /> 
    </system.web>
    是整个项目
    如页面A页面B enableEventValidation=true的话那视图状态就会开着
      

  4.   

    弄了老半天我终于知道问题所在了:原来是因为我的B页面大部分是直接复制A页面的,而FORM标签的ID和ACTION属性没有修改,导致了以上问题- -还是很谢谢热心回答的2位~