asp.net 回发或回调参数无效的各种情况分析及解决办法
昨天,在实现级联菜单的时候,突然出现一下错误:
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
我们先看提示在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证 这句话说我们设置了 enableEventValidation 属性,设置的值为 true ,也就是启用了事件验证,那是不是也可以禁用该事件呢?将enableEventValidation 属性设置为 false 后再运行程序,会发现错误没有了,那是不是问题就解决了呢? 可能有的人设置false后问题解决了,可能有的人设置false之后,该问题解决了却引发了连带问题。事件验证 又是怎么一回事呢?
MSDN的说明是:
此事件验证机制可降低未经授权的回发请求和回调带来的风险。当EnableEventValidation 属性设置为 true 时,ASP.NET 仅允许在回发请求或回调期间可由控件引发的事件。
通过此模型,控件可在呈现期间注册其事件,然后在回发或回调期间验证这些事件。默认情况下,ASP.NET 中的所有事件驱动控件均使用此功能。
强烈建议不要禁用事件验证。如果确实需要禁用事件验证,请确保不会构造出对应用程序产生意料之外影响的回发。
在大多数情况下,请通过在 Web.config 文件中设置 @ Page 指令的 enabledEventValidation 属性 (Attribute) 或页元素的 enableEventValidation 属性 (Attribute) 来设置 EnableEventValidation 属性 (Property)。如果在代码中设置 EnableEventValidation 属性,则在页处理的 Page_Init 阶段进行设置。
出现此类错误的Case有以下几种:
1.From的嵌套集解决方法
首先一个页面是可以有多个Form的,但是只能有一个Form 被标记为 runat="server" 并且多个Form不可以嵌套。 那Form 嵌套会不会引起本文这个错误呢?我试了几次都没有出现本文的错误。 但如果Form 没加载完毕的时候提交Form则会出现本文的错误,不过这与Form 嵌套无关。
2.if(!this.Page.IsPostBack)
这个错误包括很多种情况,需要视情况而定。
3.级联菜单
原因分析:
ajax应用中包含下拉列表框(DropDownList)是出现这个错误频率最高的Case了,那为什么会这样呢?是否像网上所说的那 样呢?实则不然,先让我们看下ajax应用中的下拉列表框做了那些事,常见的是省市联动的ajax应用,市的下拉列表框在页面加载后是没有内容的,是根据 用户选择的省 异步向服务器请求然后将响应解析之后加载到市的下拉列表框中,然后提交。当提交的时候本文的错误就出现了,那提交的时候做了什么事出现了这个错误呢?原来在页面呈现的时候,DropDownList 的 render 事件,会遍历 DropDownList 每一项的Value 属性,与 DropDownList 的UniqueID 属性 hash 之后做 XOR 并将结果保存到页面中。保存在 id 为 __EVENTVALIDATION 的 hidden中,它看起来可能是这样的 <input type="hidden" id="__EVENTVALIDATION" name= "__EVENTVALIDATION" value="/wEWBQKGg9abDQKd9sHMBgKc9s........" /> 当我们选择省市的DropDownList 并提交时,在 DropDownList 的 LoadPostData 事件中会验证提交的内容与 id 为 __EVENTVALIDATION 的 hidden 的Value ,因为之前市的DropDownList 并没有项,可是提交的时候我们给它加了若干项而事件验证机制不知道,它会判断出提交的数据不是预期的是未经授权的、是无效的,也就会报出本文的错误了。那如何解决也就明确了,只要 我们告诉事件验证机制那些数据是有效的问题也就迎刃而解了。
解决方法:
在做级联菜单的时候可以将DropDownList控件替换成select,如:
UI-->
<asp:DropDownList id=”ddlCity” runat=”server”>
</asp:DropDownList>
C#-->
string cityName = this.ddCity.SelectedItemValue;
替换为:
UI-->
<select id=”ddlCity” runat=”server”>
</select>
C#—>
string cityName = Request[this.ddlCity.UniqueID]
4.是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字的就行了。
asp.net 回发或回调参数无效的各种情况分析及解决办法的更多相关文章
- asp.net 解决 "回发或回调参数无效" 一些常见解决方案
一.回发或回调参数无效,出现下图错误, 常见解决方案: 1.在页面的<%@ Page Language="C#" AutoEventWireup="true&qu ...
- 点击datalist中Button按钮出现“回发或回调参数无效......”
遇到问题: 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page ...
- System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation="true"/>
转载自http://blog.csdn.net/dongge825/article/details/7868151 关于在同一个页面中使用Gridview控件的时候发现气updaeting事件无法被服 ...
- 回发或回调参数无效。在配置中使用 pages enableEventValidation=true 或在页面中使用 %@ Page EnableEventValidation=true % 启用了事件验证
WebForm中回发或回调参数无效问题的解决 解决 .NET中回发或回调参数无效问题的解 该错误的详细提示信息为: 回发或回调参数无效.在配置中使用 <pages enableEventVali ...
- 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。
问题补充: “/Source”应用程序中的服务器错误. 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或 ...
- 回发或回调参数无效 “HtmlSelect”不能有类型为“LiteralControl”的子级
原文发布时间为:2009-11-14 -- 来源于本人的百度文章 [由搬家工具导入] 回发或回调参数无效 “HtmlSelect”不能有类型为“LiteralControl”的子级 出现这两个错误,一 ...
- updatepanel 回发或回调参数无效
不同于网上的其它情况,这个是由于通过js修改了服务器控件Select的列表项数目,导致验证viewstate时出现的问题.最后改为通过服务器代码来给Select加选项,就不会报这个错误了. 服务器控件 ...
- 使用repeater开发出现 回发或回调参数无效 的问题
我的就是因为没有加IsPostBack,导致在页面每次刷新时都生成一遍,造成重复绑定Repeater控件,以致事件验证出错,加上就好了 protected void Page_Load(object ...
- Win7下VS2010使用“ASP.Net 3.5 Claims-aware Template”创建ClaimsAwareWebSite报"HRESULT: 0x80041FEB"错误的解决办法
问题描述: 使用VS2010的WIF开发模板创建“Claims-aware ASP.NET Site”.“Claims-aware WCF Service”,下载安装后,创建网站时,报错"H ...
随机推荐
- NGUI国际化 多语言
相关组件 NGUI的本地化操作相关的组件 Localization UILocalize Language Selection 主要部分 在需要本地化的UILabel上绑定UILocalize,填写K ...
- java 14 -10 Calendar类以及练习
Calendar:它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法, 并为操作日历字段(例如获得下星期的日期)提供了一些方法. 1 ...
- cotangent Laplacian
几何网格处理经常用到 cotangent laplacian矩阵.前几天把这个功能整合到我的Maya 转 Matlab插件了. 这里发一个利用cotangent laplacian计算特征向量并显示的 ...
- dos系统下mysql常用命令
show table status;//查看所有表状态,通过这个命令可以得知表的创建时间和最后更新时间,以及该表是基表还是视图以及是什么表引擎等信息. show table status from d ...
- html2canvas手机端模糊问题
待解决.测试对于图片之类的没有影响.但是文字在手机上看起来比较模糊.
- Linux 下安装 jdk步骤:
一:在安装自己下载的jdk之前,要先看看新安装的CentOS 6.4系统自带的jdk版本,如果存在最好是卸载掉,然后再安装自己下载的jdk版本,如何卸载linux系统自带的jdk网上有很多例子,相信大 ...
- 网站性能评分工具Yslow 使用教程
Yslow 这个工具相信无论是搞前端的攻城师或者是搞网站的站长都了解,Yslow 可比谷歌的PageSpeed 有名多了:那个百分制下的评分数据总让国人着迷,看来应试教育造的孽太深了.Jeff 认为的 ...
- SQL时间相关 - SQL日期,时间比较
SQL Server 中时间比较 例子: select count(*) from table where DATEDIFF ([second], '2004-09-18 00:00:18', '20 ...
- 广州传智博客黑马训练营.Net15期
广州传智博客黑马训练营.Net15期 7 张扬波 MVC大项目 6 张扬波 MVC 3 胡凌浩 HTML&JS 2 基础加强+三层 5 张扬波 企业站点(asp.net)&EF 4 江 ...
- GEOS库学习之五:与GDAL/OGR结合使用
要学习GEOS库,肯定绕不开地理方面的东西.如果需要判断的两个多边形或几何图形,不是自己创建的,而是来自shapefile文件,那就得将GEOS库和GDAL/OGR库结合使用了.实际上只需要OGR就行 ...