稻草屋
疯行天下
错误信息:验证视图MAC失败。如果此引用程序由网络场或群集承载,请确保<machineKey>配置指定了相同的   validationKey   和验证算法。不能在群集中使用   AutoGenerateP>    
   
  原因:表格,指定了DataKeyNames属性,则出于安全的理由(因为DataKeyNames指定的字段代表数据的主键,且该主键值需要保存在视图状态中发送到客户端,用户如果篡改主键值,会导致安全问题),GridView会要求加密视图状态。为此会自动在页面表单</forms>之前添加一个<input   type="hidden"   name="__VIEWSTATEENCRYPTED"   id="__VIEWSTATEENCRYPTED"   value=""   />   。  
   
  当UpdatePanel更新时,UpdatePanel内部的控件被提交到服务器进行处理(Patrial   Rendering),而整个页面并没有被提交。也就是说隐藏的input控件没有随着一起提交。因此服务器并不知道提交的ViewState被加密了,从而导致MAC验证错误。  
   
  解决方法:  
   
  通过在Web.config里边添加  
   
  <pages   enableEventValidation="false"   viewStateEncryptionMode   ="Never"   />  
在页面的Page   指令中添加   EnableViewStateMac="false"属性如下:<%@   Page   EnableViewStateMac="false"%>.具体的原因本人现在还不详,等以后找到了原因再给大家分享。但是在有些资料里说用了EnableViewStateMac="false"以后,会存在一定的安全隐患...具体的本人现在也不详--:).能解决问题是最主要的.  

posted on 2009-07-31 15:57  子谦  阅读(392)  评论(0编辑  收藏  举报