【问题标题】:Populating dropdownlist client side. Getting post back validation error填充下拉列表客户端。获取回发验证错误
【发布时间】:2010-09-07 14:44:53
【问题描述】:

我有一个带有两个下拉列表的 web 控件。当您从第一个中选择某些内容时,第二个会相应地填充。当回发发生时,我得到了旧的:

回发或回调参数无效。启用事件验证 使用在 配置或 在一个 页。为了安全起见,这 功能验证参数 回发或回调事件起源 从服务器控制 最初渲染它们。如果数据 是有效的和预期的,使用 ClientScriptManager.RegisterForEventValidation 方法来注册 回发或回调数据 验证。

我知道这个问题是什么;我正在用意外数据填充下拉列表。我已经阅读了错误并找到了修复,例如覆盖您为每个新下拉列表项调用“RegisterForEventValidation”的 Render 方法。但是,我不能这样做,因为我正在重新填充下拉客户端。

理论上,如果我添加所有可能包含在下拉列表中的值(大约 3000),我可以使用此方法,但我并不想这样做。

在不禁用 EventValidation 或填充下拉列表服务器端的情况下,是否有任何其他方法可以绕过此错误?

【问题讨论】:

    标签: c# javascript asp.net drop-down-menu


    【解决方案1】:

    您可能必须使用基本的 html 选择并在 Request.Form 集合中查找所选值。

    有了DropdownList,恐怕除了这2个之外你别无选择。

    【讨论】:

    • 非常感谢,我使用了 Select,这正是我所需要的。干杯。
    【解决方案2】:

    不幸的是,不支持在每个控件的基础上禁用事件验证。不过,根据我的经验,禁用页面上的事件验证并不是那么糟糕。

    无论是否启用事件验证,明智的开发人员都会验证所有输入。 the AntiXSS library 之类的工具可以派上用场,用于识别和/或清理潜在的恶意输入。

    如果您已经在遵循仔细验证表单输入的做法,那么禁用开箱即用的 ASP.NET 验证行为应该是一个可行的解决方案,不会给您的项目增加实质性风险。

    【讨论】:

    • 感谢您的回复。我会调查那个图书馆。我不能禁用事件验证的原因是这个 web 控件可以在大多数站点页面中使用,我不想禁用整个站点的验证。如果我可以仅在 web 控件本身上禁用它会很理想,但我很确定我不能
    • @Gareth - 祝你好运。我也很失望,不能在每个控件的基础上禁用验证。您可能会发现 @Claudio 建议使用通用 HTML 选择足以满足您的需求。
    【解决方案3】:

    渲染方法可能会解决您的问题。但是,更快的是子类化。什么都不做,只将你的 DropDownList 子类化并在你的 aspx 页面中使用它。

    我做到了,并且工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多