13

当我的数据绑定控件上发生事件(添加/编辑/删除)时,我收到以下错误。

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

我正在使用自定义 DataList 控件,但 GridView、DetailsView、FormView 和 Repeater 控件(可能还有其他数据绑定控件)也会出现此问题。

我能找到的答案告诉我关闭配置文件或页面中的验证,但这听起来不像是最好的解决方案。我究竟做错了什么?

4

3 回答 3

24

问题是在页面 Load 事件中为控件加载数据并调用 DataBind() 方法。但是,如果在引发事件之前调用 DataBind() 方法,则会在控件命名发生更改时生成上述异常。

解决方案是将其更改为 if(!IsPostback) DataBind(),然后在事件处理程序的末尾调用 DataBind() 方法。无论如何,您大部分时间都需要在处理程序结束时调用它以影响更改。

如果这不是您的问题,并且您正在使用 JavaScript 修改控件客户端,请查看这篇文章

这是一篇自我回答的帖子,因为我在博客上收到了很多关于这个问题的回复,我想我可能会进一步分享。

于 2008-11-16T08:54:30.273 回答
7

这次真是万分感谢。我遇到了这个问题,你的自我回答帮助我解决了这个问题。

在每个事件处理程序结束时调用 DataBind() 方法的另一种方法是在页面 PreRender 事件中执行一次。

于 2009-06-25T18:36:21.453 回答
3

我遇到了同样的问题,我花了几个小时才解决我的问题。罗伯特的回答部分帮助了我,尽管数据绑定了我的转发器,无论是否回发,问题仍然存在。经过大量研究后,我发现了一篇建议设置UseSubmitBehavior="false",宾果游戏的帖子,它解决了这个问题。希望这会有所帮助。

于 2013-08-16T12:23:20.517 回答