Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 回发或回调参数无效。已使用启用事件验证_C#_Asp.net_Validation_Callback_Postback - Fatal编程技术网

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

C# 回发或回调参数无效。已使用启用事件验证,c#,asp.net,validation,callback,postback,C#,Asp.net,Validation,Callback,Postback,自从从2.0迁移到.NET4.5.1后,我出现了这个错误 回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证 [ArgumentException:回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的

自从从2.0迁移到.NET4.5.1后,我出现了这个错误

回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证

[ArgumentException:回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RRegisterForeventValidation方法,以便注册回发或回调数据以进行验证。]
System.Web.UI.ClientScriptManager.ValidateEvent(字符串唯一ID,字符串参数)+144
System.Web.UI.Control.ValidateEvent(字符串uniqueID,字符串eventArgument)+111
System.Web.UI.WebControl.DropDownList.LoadPostData(字符串postDataKey,NameValueCollection postCollection)+55
System.Web.UI.WebControl.DropDownList.System.Web.UI.IPostBackDataHandler.LoadPostData(字符串postDataKey,NameValueCollection postCollection)+16
System.Web.UI.Page.ProcessPostData(NameValueCollection postData,布尔fBeforeLoad)+303
System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+1593

我能做什么


我在本地主机上有这个问题,但是如果我尝试远程访问它,问题就解决了(在另一个工作站上)。如果同事尝试在他的pc上访问它(为我工作的pc)他们也会遇到同样的问题,但如果他们使用我的工作站,应用程序就会工作。

问题是,我在加载整个页面之前提交表单,并且由于某些原因,EVENTVALIDATION位于表单的末尾。我覆盖了Render方法,并移动了表单顶部的EVENTVALIDATION输入。现在,它将我也有同样的问题。 在我的例子中,这个问题是因为我在表单标签中插入了javascript,并且javascript正在提交表单。在我将解决方案从.NET 3.5迁移到4.5.1之前,代码一直运行良好。 在ASP.NET Web表单中,会自动生成一些隐藏字段。其中一个字段是_EVENTVALIDATION字段,它可以防止发布未经授权的数据(如从javascript向DropDownList服务器控件中添加额外选项)


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

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

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

然而,这在默认情况下是正确的,所以它没有任何效果。在研究这个配置并在这里找到部分答案之后 ,我使用Resharper+DotPeek+中的代码在System.Web assembly内部进行调试。我发现在调试模式下,InnerWriter属性不是HttpWriter,而是Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.BrowserLinkedExecutionListener.PassthroughPositionTracker.PassthroughTextWriter的类型。PageInspector功能是干扰页面呈现

我的解决方案:

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

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

阅读关于page.EnableEventValidation?用谷歌搜索错误?;)的可能重复我在本地主机上有此问题,但如果我尝试远程访问它,问题就解决了(在另一个工作站上)。如果同事尝试在他的pc(为我工作的pc)上访问它他们也会遇到同样的问题,但如果他们使用我的工作站,应用程序就会正常工作。您尝试过上面评论中提到的解决方案吗?我不能禁用事件验证(这不是一个好主意)。我不能使用ASP.NET Ajax UpdatePanel或使用经典回发(我们有内部框架)。
<appSettings>
  <add key="PageInspector:ServerCodeMappingSupport" value="Disabled" />
</appSettings>