EnableEventValidation 是什麽東東?

原创 2011年01月10日 16:36:00

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回 调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

错误:

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

异 常详细信息: System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation="true"/> 或在页面中使用 <% @ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数 是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

发生条件:
1。画面有隐藏控件。
2。多次的GRID绑定。

发生原因:
.NET基于页面中的输出元素会在最终页面中生成一个__EVENTVALIDATION隐藏字段。做了一个简单的测试。页面中创建一个<asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" />,同时创建对应的Click事件处理程序。运行程序,可以正确响应事件。然后设置btnSubmit.Visable=false,手动在页面 上面添加<input type="submit" name="btnSubmit" value="Submit" />。运行程序,会出现一个包含EnableEventValidation内容的异常。设置<@Page EnableEventValidation="false">再运行程序,又可以正确响应事件。观察前后两次__EVENTVALIDATION 的内容,可以发现是不同的。关于出现的异常,可以认为在输出的时候没有包含btnSubmit,可是再提交到后台的时候却有相应的内容,前后不一致,所以 在开启事件校验的情况下.NET抛出了异常。

解决办法1:
Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//绑定数据;
}
}

解决办法2:
<pages enableEventValidation="false"/>

 

 

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/>

可能出现的问题:
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
英文描述
id postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for valida

可行的解决方法有:

1、在页面的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 中添加 EnableEventValidation="false" 就可以了。(首先考虑的)

2、通过web.config
<system.web>
<pages enableEventValidation="false"/>

3、是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。

4、如果页面含有 DropDownList 或 ListBox这样的控件,可能以下原因造成:

4.1 在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。
4.2 原因是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字的就行了.最好在web.config中添加如下语句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>因为 POSTBACK 如果不采用 UTF-8 编码, JAVASCRIPT 会认为有问题。
只改 requestEncoding="utf-8" 就可以了,responseEncoding="utf-8" 不用

5.Register For Event Validation
其原理就是让asp.net记录这个postback value.
RegisterForEventValidation必须在render时调用.

 

这个要具体分析。本来这个措施是asp.net2.0用来防止客户端“欺诈”服务器端的。例如本来输出到客户端的一个事件被触发时需要回发的命令是“__doPostback( 'ctl01$abc ', 'user_1 ')”的,如果采取采取手段把回发参数由   user_1   改为   user_5   了,服务器端会重新核对输出的是不是user_5,发现和这个页面上一个输出的脚本不一致,就会产生这个异常。

但是,很多程序员写的程序按照过去的习惯(或者按照更加高级灵活的设计例如一些Ajax组件)没有考虑这个问题或者是忽略这个欺诈的可能性,写的程序可能会修改参数或者修改目标控件。

因此这样具体问题具体分析。不太可能跟浏览器距离服务器的远近有关,应该还是编程逻辑问题。你应该对出异常的画面以及所使用的数据进行分析。有时候,经常也需要将这个参数设置为false,放弃安全管理。

0
0
(请您对文章做出评价)

【揭密:刘强东9年密谋的商业布局—京东快物流背后的核心技术盘点】

【揭密:刘强东9年密谋的商业布局—京东快物流背后的核心技术盘点】 黄刚-物流与供应链  原创 2016-06-16 00:20:30 阅读数:4865 首次全面盘点刘强东9年物流布局,全面梳理...
  • javahongxi
  • javahongxi
  • 2016年06月16日 01:42
  • 1702

詩經-甲骨文研究:東方之日

詩經·國風·齊風·東方之日-原文语序:東方之日兮,彼姝者子,在我室兮;在我室兮,履我即兮。東方之月兮,彼姝者子,在我闥兮;在我闥兮,履我發兮。   詩經·國風·東方之日-調整為現代语序:東方之日兮,彼...
  • edenesetree
  • edenesetree
  • 2015年02月05日 19:14
  • 1204

甲骨文释义By東方之朱:詩經.狼跋

詩經·國風·豳風·狼跋.原文:   狼跋其胡,載疐其尾;公孫碩膚,赤舄幾幾。狼疐其尾,載跋其胡;公孫碩膚,德音不瑕。 武国平UL. KUOPIGN译文:  狼出行会收紧胡须,车出行会紧固车尾...
  • edenesetree
  • edenesetree
  • 2015年03月05日 01:23
  • 1158

matlab 中@一个东东作甚

matlab中@是用于定义函数句柄的操作符 下面介绍两种常用的用法 1.函数句柄既是一种变量,可以用于传参和赋值 比如说 变量名=@+一个函数名 f=@sin%那么它就可以传参,用法和sin函...
  • qinze5857
  • qinze5857
  • 2018年01月06日 16:16
  • 31

如何使用TestFlight进行Beta测试(AppStore iTunesConnect发布的好东东)

转自:http://blog.csdn.net/sakulafly/article/details/39500019     在2014年的苹果全球开发者大会上,苹果宣布他们把Tes...
  • huanghr_1
  • huanghr_1
  • 2014年11月14日 01:25
  • 1961

shell里面一些东东 论坛里找的

1. sed 替换部分字符temp内容aaabbb|aaacccccc|aaa.ddddd|aaaeee|aaafffffffff|aaa.ggggg|要达到目的aaa[a_z]*这个正则表达式(也就...
  • ruiqingzheng
  • ruiqingzheng
  • 2013年03月14日 23:36
  • 304

C语言中必须要搞清楚的几个东东

1.声明和定义全局变量和函数 一个全局变量或函数可以(在多个编译单元中)有多处的声明,但是定义却最多只能允许出现一次。对于全局变量,定义是真正分配空间并赋初始值(如果有)的声明。 static修饰...
  • he90227
  • he90227
  • 2014年12月08日 15:15
  • 561

记,基于Android开发类似于微博的东东时,值得记录的几个问题~

作为一个Java的使用者,在经历了Web到服务端开发的工作后,今年终于开始接触一些android开发方面的工作了。 新的挑战~~最近有一个需求是在应用里开发一个类似于微博的功能模块,说难不难,说易不易...
  • ghost_Programmer
  • ghost_Programmer
  • 2015年03月21日 16:06
  • 2515

C++,重载输出操作符<<, cout.operator()是什么东东?

#include #include using namespace std; class Student { public: // 存 void setname(string...
  • sergery
  • sergery
  • 2012年10月06日 15:08
  • 16508

MHL技术剖析,比HDMI更强的东东

2012-07-31 21:06:10 分类: Delphi MHL这个只是经常听说,没有见过的东西,现在已经非常火热了,我们才刚刚开始做,人家三星都推出几款带MHL接...
  • mirkerson
  • mirkerson
  • 2014年02月24日 11:11
  • 3297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EnableEventValidation 是什麽東東?
举报原因:
原因补充:

(最多只允许输入30个字)