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

Rob*_*ndu 2 c# asp.net validation postback callback

从2.0迁移到.net 4.5.1后我有这个错误

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

[ArgumentException:无效的回发或回调参数.使用配置或页面中的<%@ Page EnableEventValidation ="true"%>启用事件验证.出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件.如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId,String argument)+144
System.Web.UI .Control.ValidateEvent(String uniqueID,String eventArgument)+111
System.Web.UI.WebControls.DropDownList.LoadPostData(String postDataKey,NameValueCollection postCollection)+55
System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler .LoadPostData(String postDataKey,NameValueCollection postCollection)+16
System.Web.UI.Page.ProcessPostData(NameValueCollection postData,Boolean fBeforeLoad)+303
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+1593

我可以做什么?

我在localhost上有这个问题,但如果我尝试远程访问它,问题就解决了(在另一个工作站上).如果同事试图在他的电脑(对我工作的那个)上访问它,他们会遇到同样的问题,但如果他们使用我的工作站,该应用程序工作.

小智 10

我有同样的问题.在我的情况下,问题是由于我在表单标记中插入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==" />
Run Code Online (Sandbox Code Playgroud)

通常这些隐藏字段是作为表单内的第一个元素生成的.但是在升级之后,这个元素开始显示为表单中的最后一个元素,就在我正在进行提交的javascript下面.因此,该字段不是作为请求的一部分发送的,并且服务器将其解释为试图发布未经授权的数据.

经过一些研究后,我发现web.config中有一个配置可用于控制字段的位置:

<system.web>
    <pages renderAllHiddenFieldsAtTopOfForm="true" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

但是默认情况下这是真的,所以没有效果.在研究了这个配置并在此处找到部分答案之后为什么忽略了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>
Run Code Online (Sandbox Code Playgroud)

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