<pages enableEventValidation ="false">的目的

Rob*_*ert 23 asp.net

我在web.config中使用了以下内容

<pages enableEventValidation="false">
Run Code Online (Sandbox Code Playgroud)

这解决了我们使用Ajax时遇到的问题.

我们有一个网页,如果您直接浏览使用标准的HTML超链接工作正常.

如果您通过gridview中的链接从另一个页面浏览到该页面,并在RowCommand事件中将response.redirecting返回到在查询字符串中传递ID的页面.该页面引发了面板内控件的错误

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

我很高兴将页面验证保留为假,因为它似乎没有其他影响.

有什么想法发生了什么?

SLa*_*aks 14

阅读文档.

编辑:出于安全考虑,最好尽可能将其设置为true.

因此,我建议您仅在导致问题的各个AJAX页面上将其设置为false,同时在web.config中保留true.


rah*_*hul 7

这里开始

由于事件验证功能,无效的PostBack或CallBack参数错误基本上会提高.EventValidation功能是ASP.NET 2.0中的一项新功能,它提供了额外级别的检查,以验证来自客户端上的控件的回发是否真的来自该控件,而不是来自使用跨站点脚本注入等内容的恶意攻击者试图操纵事物.这是我们越来越多地在编程模型中添加深度级别安全性的整体策略的一部分 - 这样即使开发人员忘记添加自己的安全检查,开发人员也可以默认安全.

现在,当您触发单击事件并且对象重新绑定或其属性在Page_Load事件中更改或有人试图通过跨站点脚本攻击您的系统时,可能会发生无效的PostBack或CallBack参数错误.每次.Net Framework呈现一个页面,然后它为所有控件关联一个唯一的Guid.绑定gridview或repeater时,每个数据绑定框架都会为控件关联一个新的guid.因此,每当你发射事件时,确保Page_Load事件不会改变控件,因为如果控件改变了它,它将有一个不同的Guid,它们实际上已经开启了事件以进行回发.以下是此错误的一些情况.

1)GridView中的无效回发或回调参数问题可能是:您正在使用对象数据源或带有函数调用的手动绑定将Page_Load事件中的数据绑定.这将使您的GridView在任何控件的每个事件触发时绑定数据.当您使用OnRowCommand触发任何GridView命令时,在RowCommand触发之前,您的GridView将重新绑定,并且其中的所有控件都将分配给新的id.因此RowCommand无法获取已触发事件的项目.GridView中无效回发或回调参数的解决方案:您可以在此if条件下绑定数据

   if (!IsPostBack)

   {

          //Your code for Bind data 

   }
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,这个代码肯定会给你解决方案,然后检查是否有任何其他控件没有给出错误.