asp.net - 使用 JavaScript 重新排列的 ListBox 元素导致回发时发生事件验证错误

标签 asp.net javascript listbox eventvalidation

我创建了一个项目交换器控件,其中包含两个列表框和一些允许我在两个列表之间交换项目的按钮。交换是使用 javascript 完成的。我还在列表中上下移动项目。基本上,当我将项目移动到右侧的列表框时,我将元素 (GUID) 的数据键存储在隐藏字段中。在回发时,我只是从现场读取 GUID。一切正常,但在回发时,出现以下异常:

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

我准备了一个测试应用程序。您所要做的就是下载存档并运行项目。在网页上选择 3 个项目,按全部添加,然后将第三个元素向上移动一级,然后点击“按钮”。错误将显示出来。关闭事件验证绝不是可以接受的。任何人都可以帮助我,我已经花了两天没有找到解决方案。

TEST APPLICATION

最佳答案

问题是列表的已保存 View 状态与回发时收到的数据不匹配。事件验证问题很可能只是由于这种方法可能出现的问题之一。 webforms 的架构不允许这种用途,而且很可能,这种方法会出现更多问题,即使您成功避免了事件验证问题。您有多种选择:

1) 最简单的是在服务器上执行交换逻辑而不是使用 javascript。这样, View 状态将在回发之间保留,并且多次往返服务器所增加的开销可能不是问题。

2) 如果到服务器的多次往返是一个问题,请编写一个服务器控件来处理它自己的 View 状态。这当然是一种非常吸引人的方法。

3) 中间方法可能是使用两个简单的 html 列表(只需编写 html 标记而不使用 asp.net 控件)并在客户端从 javascript 维护隐藏字段中的 id 列表。在回发时,只需解析隐藏字段并提取 id,而忽略 html 列表。

如果没有严重的反对意见,我会选择 1。

关于asp.net - 使用 JavaScript 重新排列的 ListBox 元素导致回发时发生事件验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/212988/

相关文章:

javascript - 如何访问由 javascript document.createElement 函数创建的元素

CSS @Font 面部规则不适用于文本框

c# - 右键单击以选择列表框中的项目

c# - MVC WebApi 端点不适用于生产环境,但常规端点可以

c# - OWIN ASP.NET - 避免在 Web Api 中没有身份的同一帐户多次登录

javascript - 我的启动项目中的 JS 文件又出现 'The Breakpoint will not currently be hit' 错误

javascript - 自定义数组对象

javascript - 通过 ID 和类获取元素内的元素 - JavaScript

dictionary - 如何在列表框中显示字典

wpf - 使用分组绑定(bind) WPF 中的列表框