回发包含修改的列表时 ASP.NET 错误

ASP.NET Errors when PostBack Includes Modified List

本文关键字:ASP NET 错误 列表 包含 修改      更新时间:2023-09-26

我正在使用JavaScript/jQuery将元素动态添加到WebForms页面上的下拉列表中。这工作正常,但是当我将页面发布回服务器时,出现以下错误:

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

我想我明白这里发生了什么:ASP.NET 正在验证该列表是否与最初提供的列表相同,并检测到它已更改。这是一项安全功能,因为这表示数据是从修改的页面提交的。

但是,在这种情况下,该行为是有效的。而且我不想禁用此功能,因为它对于我页面的其余部分来说是一个很好的安全功能。

有没有办法告诉 ASP.NET 只忽略对这个列表的更改?

编辑:

我的代码位于 Web 用户控件中,因此我认为为控件设置 EnableEventValidation 属性可能是可以接受的。不幸的是,此属性似乎仅适用于整个页面。

我发现我能够通过创建一个自定义的 DropDownList 控件来消除此错误,如下所示:

public class DropDownListNoEventValidation : DropDownList
{
}

这显然创建了一个名为 DropDownListNoEventValidation 的控件,没有属性 SupportsEventValidation

结果是消除了我之前遇到的错误。遗憾的是,如果所选值是动态添加到列表中的项目,则 ASP.NET 似乎无法识别所选值。我仍在研究这个问题。

更新:

我最终使用了没有runat="server"<select>元素。这是更多的工作,但似乎是让它按预期工作的最直接的方法。