我正在使用C#打开一个弹出窗口,允许用户从中选择一些值并将值发送回服务器。但是,当我关闭弹出窗口时,出现以下错误:
无效的回发或回调参数。使用配置中的<pagesenableEventValidation="true"/>
或页面中的<%@ Page EnableEventValidation="true" %>
启用事件验证。出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation
方法注册回发或回调数据以进行验证。 “
有谁知道可能导致这种情况的原因?
答案 0 :(得分:1)
将值发布回包含HTML标记或其他受限字符的表单时,我看到了此错误。默认情况下,.NET会出于安全原因阻止此操作。
关闭表单时,请检查您要发布回页面的值,以查看是否在其中一个输入值中发送任何标记。
如果您必须发送此类数据,请在ASPX页面上禁用EnableEventValidation属性,并确保应用验证以防止注入。
答案 1 :(得分:0)
这个错误出现的最常见原因(对我来说)是你自己创建控件(在代码隐藏中)而不是在.aspx文件中以声明方式创建控件。特别是在初始页面渲染期间,您创建了一组控件,并且在回发期间,您的页面创建逻辑会创建一个(可能稍微)不同的控件集。必须创建页面上的所有控件,并在每次呈现页面时将其添加到树中的相同位置,无论是否回发。否则可能导致此错误。
此错误可能还有其他原因,但这是我见过的唯一情况。
答案 2 :(得分:0)
关闭事件验证。只要您自己检查表单值并确保不接受无效值,这是完全没必要的。
答案 3 :(得分:0)
此事件验证机制 降低未经授权的风险 回发请求和回调。同 这个模型,一个控件注册它 渲染过程中的事件然后 验证期间的事件 回发或回调处理。所有 ASP.NET中使用的事件驱动控件 默认情况下此功能。
您可以在PAGE或web.config中关闭EnableEventValidation,但这被视为安全风险。
你可以试试:除非必要,否则确保在 - !Page.IsPostBack
中完成绑定答案 4 :(得分:0)
如果您的弹出窗口(或其他任何内容)将任何内容注入到回发的表单中,那么这可能是错误的来源。
当使用手动连接的jquery ajax调用来更新级联选择列表(比aspnet ajax快得多)时,我遇到了这个错误,放入辅助选择的新值(runat = server)导致事件验证失败。您可以通过脚本管理器(我觉得有点痛苦)注册所有内容,或者禁用事件验证,但这确实意味着更加努力并自己验证它。