错误描述:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
今天些程序时,遇到以上问题提示,得到了解决:
1、上下文:我以前用 vs.net 2003 写的一个项目,现在要增加新的功能,改用 vs.net 2005 环境编写,在新的页面上放入 gridaView ,并在模版列中绑定 ImageButton ,并有相关的点击事件;
2、问题描述:编译成功,当运行时就出现以上的错误描述;
3、解决方案尝试:
a、将 enableEventValidation 设置为 false ,结果不报错,当程序找不到事件中的 sender 对象(本程序功能需要该对象);
b、将 enableEventValidation ,将 ImageButton 事件中的功能放到 RowCommand 事件中,
当程序根本就触发不了 RowCommand 事件;
c、怀疑是配置文件的原因,所以将 web.config 改成 vs.net 2005 的 配置文件,结果运行时不报错,但点击 GridView 中的 ImageButton 时就报以上的错误信息;
由以上尝试得知,将 enableEventValidation 值设成 false ,虽然不报错,但是治标不治本的;
4、解决方案:在网上搜了很多资料,出现以上问题有两种,一种是 Form 中嵌套 Form ,另一种是用 Ajax 技术实现三级联动;但我这种情况不属于以上两种,大多数解决方案是将 enableEventValidation 设置为 false ,最终找到了解决方案,就是在 if (!Page.IsPostBack) 中初始绑定 GridView 。根据我的理解是在页面初始加载是绑定 GridView ,将服务器控件注册到页面中,然后在触发事件时 enableEventValidation 的验证功能找到回发或回调事件的服务器控件,因而才能触发服务端事件。