【问题标题】:Invalid postback or callback argument. Why?无效的回发或回调参数。为什么?
【发布时间】:2011-08-17 02:59:09
【问题描述】:

所以我得到了异常

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

使用以下堆栈跟踪

[System.ArgumentException: Untrapped 例外:无效回发或 回调参数。事件验证 使用 in 启用 配置或 在一个 页。为了安全起见,这 功能验证参数 回发或回调事件起源 从服务器控制 最初渲染它们。如果数据 是有效的和预期的,使用 ClientScriptManager.RegisterForEventValidation 方法来注册 回发或回调数据 验证。] 在 System.Web.UI.ClientScriptManager.ValidateEvent(字符串 uniqueId,字符串参数)在 System.Web.UI.Control.ValidateEvent(字符串 唯一ID,字符串事件参数)在 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(字符串 事件参数)在 System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 事件参数)在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler 源控件,字符串 eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection 后数据)在 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 includeStagesAfterAsyncPoint)

异常发生在提交表单后,然后快速单击链接按钮下载同一页面上的文件,然后再次重新加载页面。

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

提前致谢!

【问题讨论】:

  • 我在安装 .NET Framework 4.5 时在生产服务器上遇到了同样的异常。因此,我不得不恢复 .NET 4.0。顺便说一句,.NET 4.5 只是 .NET 4.0 的更新(或服务包),它们不能并存。多么愚蠢的东西......

标签: asp.net postback linkbutton


【解决方案1】:

这个错误对我来说是间歇性出现的,在一个非常大的页面上。

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

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

【讨论】:

    【解决方案2】:

    我发现如果您不从模板中将 html 表单全部删除,那么它们可能会在 WebForms 中导致此问题

    【讨论】:

      【解决方案3】:

      在 page.asx 中的页面标签 EnableEventValidation="false" 中使用它

      【讨论】:

      • 使用 EnableEventValidation="false" 不好,因为它会降低安全性。
      • 我同意它会降低安全性,但我找到了任何可以解决问题的建议的解决方案......@Dirk Strauss
      【解决方案4】:

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

      1. 您正在执行创建新输入或克隆现有输入的客户端魔法。

      2. 在处理表单提交时,.NET 对 LinkBut​​ton 做了一些事情,导致它不再可用。我遇到的一些示例是,当您的 LinkBut​​ton 在后端动态创建时,或者您正在使用 UpdatePanels 并且它们的内容在表单提交期间发生更改。

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

      【讨论】:

      • 我同意你的建议。在我的情况下发生的事情与第 2 点有关。但是,我无法确定它是如何失败的。控件的呈现方式应与它们在原始页面加载(回发前)上的方式相同。我的链接按钮在数据列表中。我尝试在绑定我的数据列表之前使用 !IsPostback 子句,但它仍然失败。
      • “我的链接按钮在数据列表中”是关键语句。数据列表是否在回发时反弹?如果是这样,原始的 LinkBut​​ton 将被清除并创建新的 LinkBut​​ton。它在功能和美学上相同,但 .NET 知道其中的区别并引发了这个错误。
      【解决方案5】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-11-18
        • 2011-09-26
        • 1970-01-01
        相关资源
        最近更新 更多