无效的回发或回调参数。为什么?

时间:2011-05-02 16:49:32

标签: asp.net postback linkbutton

所以我得到了异常

  

无效的回发或回调参数。   使用启用事件验证      在配置或<%@ Page   EnableEventValidation =“true”%>在一个   页。为安全起见,这个   功能验证参数   回发或回调事件源自   从服务器控制那个   最初渲染它们。如果数据   是有效的和预期的,使用   ClientScriptManager.RegisterForEventValidation   注册方法   回发或回调数据   验证

使用以下堆栈跟踪

  

[System.ArgumentException:Untrapped   例外:回发无效或   回调参数。事件验证   使用in启用   配置或<%@ Page   EnableEventValidation =“true”%>在一个   页。为安全起见,这个   功能验证参数   回发或回调事件源自   从服务器控制那个   最初渲染它们。如果数据   是有效的和预期的,使用   ClientScriptManager.RegisterForEventValidation   注册方法   回发或回调数据   验证。] at   System.Web.UI.ClientScriptManager.ValidateEvent(字符串   uniqueId,String参数)at   System.Web.UI.Control.ValidateEvent(字符串   uniqueID,String eventArgument)at   System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(字符串   eventArgument)at   System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串   eventArgument)at   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler   sourceControl,String eventArgument)
  在   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection中   postData)at   System.Web.UI.Page.ProcessRequestMain(布尔   includeStagesBeforeAsyncPoint,Boolean   includeStagesAfterAsyncPoint)

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

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

提前致谢!

5 个答案:

答案 0 :(得分:17)

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

  1. 您正在进行创建新输入或克隆现有输入的客户端向导。

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

  3. 基本上,我相信如果您单步执行表单提交代码并观察LinkBut​​ton,您会看到.NET忘记它,当单击LinkBut​​ton时可以理解地触发此“安全例外”。

答案 1 :(得分:2)

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

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

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

默认值为true - 那么您运行的是什么版本的.NET?您可以随时禁用客户端按钮,直到页面加载完毕。

答案 2 :(得分:1)

这个错误在我非常大的页面上间歇性地出现。

我发现如果在页面完成加载之前点击了按钮,则会出现此错误。

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

答案 3 :(得分:0)

在page.asx中使用此页面标记EnableEventValidation =“false”

答案 4 :(得分:0)

我发现如果您不从模板中删除所有内容,那么html表单可能会导致WebForms出现此问题