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 ...
随机推荐
- 在Unity中为模型使用表情
在游戏中让角色能够拥有表情,是我一直很想实现的一件事情,今天搜索了一下这方面的资料,找到两个解决方案. MMD For Unity GitHub:https://github.com/mmd-for- ...
- CPU相关知识-寄存器与存储器的区别
存储器一般在CPU外,一般指硬盘,U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是 50MB/S左右.内存和寄存器就是为了解决存储器读写速度慢而 ...
- 转载 ---> UITableViewCell的分割线
在iOS7中,表格中经常看到的一个情况是如下所示, 解决方法: 1,手写代码控制 1 self.tableView.separatorInset = UIEdgeInsetsMake(0, 0, ...
- Block 的基本用法
iOS中Block的基础用法 转载自简书 本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对 ...
- tp2.2.2新特点
1.不需要在配置文件中配置URL_MODEL变量就可以用普通模式和路径模式及兼容模式访问URL,但重写模式不可以. 2.当访问的URL地址没有指明具体动作(控制器里的方法)的时候,如果该控制器对应的视 ...
- WinForm 快捷键设置
一.窗体快捷键,只在窗体上有效果 首先在form_load的时候写上this.KeyPreview=true;//表示窗体接受按键事件 然后如下 private void Frm_KeyDown(ob ...
- c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑
转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时 ...
- SQL Server优化50法
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化 ...
- Linux第四次学习笔记
程序的机器级表示 寻址方式的演变 DOS → 8086 → IA32 Inter处理器系列俗称x86,其演变过程(根据其所需要的晶体管数量来说明): 8086 → 80286 → i386 → i48 ...
- 20145208 《Java程序设计》第9周学习总结
20145208 <Java程序设计>第9周学习总结 教材学习内容总结 本周学习的内容有第十六周整合数据库,第十七章反射与类加载器,第十八章自定义泛型.枚举与注释. 在本周学习中,最大的难 ...