ASP.NET视图状态验证MAC失败 解决办法
来源:互联网 发布:监狱的公主 知乎 编辑:程序博客网 时间:2024/04/29 11:18
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
分析:
分析后找到了问题的根源。首先,文章中提到,如果用GridView,并且指定了DataKeyNames属性,则出于安全的理由(因为DataKeyNames指定的字段代表数据的主键,且该主键值需要保存在视图状态中发送到客户端,用户如果篡改主键值,会导致安全问题),GridView会要求加密视图状态。为此会自动在页面表单</forms>之前添加一个<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" /> 。
然而,Atlas的UpdatePanel要求放置在<form></form>内部,也就是</form>之前。这就意味着添加的隐藏input控件没有被放置在UpdatePanel内,而是放置在UpdatePanel和</form>之间。
当UpdatePanel更新时,UpdatePanel内部的控件被提交到服务器进行处理(Patrial Rendering),而整个页面并没有被提交。也就是说隐藏的input控件没有随着一起提交。因此服务器并不知道提交的ViewState被加密了,从而导致MAC验证错误。
解决方法有二,仅供参考:
1.可以在当前页面的<page ...>里加两个属性:
enableEventValidation="false" viewStateEncryptionMode ="Never"
2.当然还可以在web.config里加入:(<system.web>之间)
<pages enableEventValidation="false" viewStateEncryptionMode ="Never" />
- ASP.NET视图状态验证MAC失败 解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题正确的解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题的解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法
- asp.net错误:验证视图状态 MAC 失败。
- 验证视图状态MAC失败的解决办法
- 验证视图状态MAC失败的解决办法
- 验证视图状态MAC失败的解决办法
- 验证视图状态 MAC 失败的解决办法
- 验证视图状态 MAC 失败的解决办法
- 验证视图状态 MAC 失败的解决办法
- 验证视图状态 MAC 失败的解决办法
- 验证视图状态 MAC 失败错误解决办法
- 验证视图状态 MAC 失败的解决办法
- Asp.Net验证视图状态 MAC 失败 ( Validation of viewstate MAC failed )
- JQuery Form Ajax提交Asp.Net表单时的验证视图状态 MAC 失败
- 将程序的配置选项写到注册表
- 一个关于优化SQL的文章
- C语言基础教程(二)数据类型、变量和运算符
- 普通Dos命令应用
- 图灵机与计算问题
- ASP.NET视图状态验证MAC失败 解决办法
- 图灵机
- Solaris zone的安装管理
- 支持多线程的CLOG类
- 呵呵,今天开始开博,自己庆祝一下!
- DWR初学者笔记
- 中国的数据库什么时候才能到来!
- 构建线程安全类的几点总结
- Solaris zone的安装管理实例