2011-05-02 67 views
7

所以我得到异常回发或回调参数无效。为什么?

无效的回发或回调参数。 在配置中使用 或 页面中的EnableEventValidation =“true”%>启用了事件验证。为了安全起见,此 功能验证参数 回发或回调事件从 最初呈现它们的服务器控件发起 。如果数据 有效并且是预期的,请使用 ClientScriptManager.RegisterForEventValidation 方法来注册 回发或回调数据以验证 。

随着以下堆栈跟踪

[System.ArgumentException:未捕获 异常:无效回发或 回调参数。事件验证 已在 配置中启用,或者在 页面中启用了EnableEventValidation =“true”%>。为了安全起见,此 功能验证参数 回发或回调事件从 最初呈现它们的服务器控件发起 。如果数据 是有效的和预期,可以使用 ClientScriptManager.RegisterForEventValidation 方法,以便为 验证注册 回发或回调数据。]在 System.Web.UI.ClientScriptManager.ValidateEvent(字符串 UNIQUEID,字符串参数)在 System.Web.UI.Control.ValidateEvent(字符串 UNIQUEID,字符串eventArgument)在 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(字符串 eventArgument)在 System.Web.UI.WebControls.LinkBut​​ton。 System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)at System.Web.UI.Page.Rais ePostBackEvent(IPostBackEventHandler sourceControl,字符串eventArgument)
处 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)

System.Web.UI.Page.RaisePostBackEvent(NameValueCollection中 POSTDATA)

提交表单后发生异常,然后在页面重新加载之前快速单击LinkBut​​ton以在同一页面上下载文件。

有人可以解释执行上述操作时发生此异常的详细信息吗?

在此先感谢!

+0

我在安装.NET Framework 4.5时遇到了生产服务器上的相同异常。正因为如此,我不得不还原.NET 4.0。顺便说一下,.NET 4.5只是.NET 4.0的更新版本(或Service Pack),它们不能并肩生存。多么愚蠢的东西... – 2012-12-21 07:33:41

回答

15

这必须是.NET中最令人沮丧的错误消息之一,但是一旦你感觉到发生了什么,这是有道理的。 .NET喜欢了解正在发生的一切。它会跟踪它在页面上放置的所有元素。沿着同样的路线,当.NET从不知道的事情接收到输入时,它就会受到冒犯。就你而言,听起来就像,当你点击LinkBut​​ton时,.NET不认为它应该在那里。根据我的经验,这是你的两种可能的原因:

  1. 你正在做的是创造新的输入或克隆现有的输入客户端的巫术。

  2. 在处理表单提交时,.NET会对LinkBut​​ton执行一些操作,导致它不再可用。我遇到过的一些例子是当你的LinkBut​​ton是在后端动态创建的,或者你正在使用UpdatePanels并且它们的内容在表单提交期间被改变。

基本上,我相信如果你逐步完成表单提交代码,然后小心地看好的LinkBut​​ton,你会看到.NET忘掉它,这可以理解触发该“安全例外”被点击LinkBut​​ton的时候。

+0

我同意你的建议。我的情况与第二点有关。但是,我无法确定它是如何失败的。应该按照与原始页面加载(回发前)相同的方式呈现控件。我的linkbutton是在一个datalist里面。我试图在绑定我的datalist之前使用!IsPostback子句,但仍然失败。 – 2011-05-02 18:49:23

+4

“我的linkbutton是在datalist”是关键陈述。 datalist是否在回发中反弹?如果是这样,原始的LinkBut​​ton将被清除并创建新的LinkBut​​ton。它的功能和美观完全相同,但是.NET知道它们的区别并且引发了这个错误。 – chprpipr 2011-05-02 20:12:36

1

如果他们在页面有机会完全呈现之前点击,那么__EVENTVALIDATION字段将不会被完全写入 - 因此您的错误。

现在,这已在3.5 SP1/3.0 SP2中修复,并在web.config中为configurable;

<configuration> 
    <system.web> 
     <pages renderAllHiddenFieldsAtTopOfForm="true"></pages> 
    </system.web> 
</configuration> 

缺省值为true - 那么您运行的是哪个版本的.NET?您可以始终禁用按钮客户端,直到页面加载完成。

0

使用该在页面标签EnableEventValidation =“假”

+3

使用EnableEventValidation =“false”是不好的,因为它降低了安全性。 – 2015-10-14 15:23:54

+0

我同意,它减少了安全性,但我找到了解决方案,可以解决问题的任何建议.... @Dirk Strauss – 2015-10-16 04:46:08

0

page.asx我发现HTML表单可能导致的WebForms这个问题,如果你不从模板删除所有

0

这个错误在我非常大的页面上时断时续地出现。

我发现如果一个按钮被点击之前页面已经完成加载,它会给出这个错误。

在点击按钮之前等待页面完全加载,我没有收到错误。

相关问题