<pages enableeventvalidation =“false”> </pages>的目的

时间:2009-10-01 12:18:11

标签: asp.net

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

<pages enableEventValidation="false">

这解决了我们对Ajax一直存在的问题。

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

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

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

我很高兴将页面验证保留为假,因为它似乎没有其他效果。

任何想法发生了什么?

3 个答案:

答案 0 :(得分:12)

阅读documentation

编辑:出于安全原因,最好尽可能将其设置为true。

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

答案 1 :(得分:6)

来自here

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

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

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

中绑定数据
   if (!IsPostBack)

   {

          //Your code for Bind data 

   }

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

答案 2 :(得分:3)

有一件事值得添加:如果要禁用特定控件的事件验证,而不是整个页面,则会有一个解决方法记录herehere(现在已引用)在relevant Connect suggestion)中:

只需子类化相关的WebControl类,不要在子类上设置SupportsEventValidation属性。子类将免于事件验证。