无效的回发或回调参数。使用事件验证启用。

3
自从从2.0升级到.net 4.5.1后,我遇到了这个错误。
“无效的回发或回调参数。使用配置中的启用事件验证或在页面中使用<%@ Page EnableEventValidation="true" %> 。出于安全目的,此功能验证回发或回调事件的参数是否起源于最初呈现它们的服务器控件。如果数据是有效且预期的,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。”
[参数异常:无效的回发或回调参数。使用配置中的启用事件验证或在页面中使用<%@ Page EnableEventValidation="true" %> 。出于安全目的,此功能验证回发或回调事件的参数是否起源于最初呈现它们的服务器控件。如果数据是有效且预期的,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。]
我该怎么办?
我在本地主机上遇到了这个问题,但是如果我尝试远程访问它,则问题已解决(在另一台工作站上)。如果同事尝试在他们的计算机上访问它(对我工作的那台计算机),则会遇到相同的问题,但是如果他们使用我的工作站,则应用程序可以正常工作。

阅读关于页面EnableEventValidation的内容?谷歌一下错误?;) - mikus
我在本地主机上遇到了这个问题,但是如果我尝试远程访问它,问题就解决了(在另一台工作站上)。如果我的同事在他的电脑上尝试访问它(那台为我工作的电脑),他们会遇到同样的问题,但是如果他们使用我的工作站,应用程序就可以正常工作。 - Robert Sandu
你尝试过上面评论中提到的解决方案了吗? - mikus
你确定它能工作吗?也许它只是没有显示任何异常,因为它被定义为隐藏远程机器的错误详情? - mikus
显示剩余3条评论
2个回答

13

我曾经遇到过同样的问题。我的问题是由于我在表单标签内插入了JavaScript,并且该JavaScript正在提交表单。这段代码在.NET 3.5中运行良好,直到我将解决方案移植到4.5.1版本。在 ASP.NET WebForm 中,会自动生成一些隐藏字段。其中之一是 __EVENTVALIDATION 字段,它作为对抗未经授权数据提交的安全保障(例如通过 JavaScript 向 DropDownList 服务器控件添加额外选项)。

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAN+KgYAJkWoXhOSD3+DUVvd3588JQsnNAC5MN7/uyI1ci6YmP63wnPMGlpCSu3QTgdg0MzSFI9etYOG29clJ48nEH4YX8U9SWslVBX+CGpmog==" />
通常这些隐藏字段是作为表单内的第一个元素生成的。但是,在升级后,这个元素开始出现在表单的最后一个元素下面,就在我进行提交的 JavaScript 下面。因此,这个字段没有作为请求的一部分发送,服务器将其解释为试图发布未经授权的数据。
经过一番研究,我发现在 web.config 内有一个配置可以用来控制字段的位置:
<system.web>
    <pages renderAllHiddenFieldsAtTopOfForm="true" />
</system.web>

然而,这是默认设置,所以它没有任何效果。在研究此配置并在此处找到部分答案之后(为什么renderAllHiddenFieldsAtTopOfForm配置设置被忽略?),我使用Resharper + DotPeek + http://http://referencesource.microsoft.com/的代码来调试System.Web程序集中的内部写入器属性,并发现在调试模式下,InnerWriter属性不是HttpWriter,而是Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.BrowserLinkExecutionListener.PassthroughPositionTracker.PassthroughTextWriter类型。PageInspector功能干扰了页面渲染。

我的解决方案:

通过在web.config的appsettings部分插入以下标记来禁用PageInspector(我根本不需要它):

<appSettings>
  <add key="PageInspector:ServerCodeMappingSupport" value="Disabled" />
</appSettings>

对我有用。更多信息请见 http://bchavez.bitarmory.com/archive/2012/12/28/rip-page-inspector-out-of-your-web-site-projects-now.aspx


1
问题在于我在整个页面加载之前就提交了表单,而 _EVENTVALIDATION 是在表单末尾的某些原因下,我不理解。我覆盖了 Render 方法并将 _EVENTVALIDATION 输入移动到表单顶部。现在它可以工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接