0

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

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

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

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

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

编辑:

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

4

1 回答 1

1

我发现我可以通过创建这样的自定义 DropDownList 控件来消除此错误:

public class DropDownListNoEventValidation : DropDownList
{
}

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

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

更新:

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

于 2013-10-14T22:20:21.453 回答