【问题标题】:Disabling Required Field Validators server-side of checkbox is checked选中复选框的禁用必需字段验证器服务器端
【发布时间】:2009-05-01 15:41:04
【问题描述】:

我有一个自定义控件,其中包含多个文本框字段和一个复选框。

如果复选框被选中,并且用户提交表单,如果文本框为空(并且复选框被选中),我需要允许他们继续。

我必须在没有 javascript 的情况下实现它。

问题在于,在自定义控件的 OnInit 事件中,我连接了文本框及其验证器,我无法访问复选框的值。


我一直在尝试覆盖复选框的唯一 ID,以便在自定义控件的 OnInit 事件中,如果 this.Context.Request.Form["CheckboxId"] = "On",我可以禁用所需的字段验证器,但只要我覆盖了复选框视图状态的 uniqueID 停止工作。

我想到的另一件事是有一个自定义的 requiredfieldvalidator,它在构造函数中接受 Checkbox 并在值为 false 时被禁用。

【问题讨论】:

    标签: asp.net controls


    【解决方案1】:

    您是否尝试在 Control.Load 事件期间通过重写 Control.OnLoad 方法来执行控件初始化逻辑?
    在控件生命周期的那个阶段,您应该能够访问 CheckBox 的值。

    附带说明一下,如果您想禁用验证,您不必禁用所有 Validator 控件。相反,您可以简单地将要提交表单的按钮上的 Button.CausesValidation 属性设置为 False

    更新:
    听起来您正在构建一个用户控件,这是一个复杂的控件,由多个作为一个单元一起工作的简单控件组成。
    如果您想完全在代码中执行此操作,例如如果您使用 自定义控件,则应该从 CompositeControl 类继承。这给了你两全其美。然后通过覆盖CreateChildControls 方法进行子控件初始化。

    【讨论】:

    • 您是否有指向描述如何执行此操作的文章的链接?我见过的所有示例都使用 OnInit 在自定义控件中添加控件。
    • 按钮位于包含经过验证的控件的自定义控件之外 - 所以这不是一个选项。现在,无论 OnLoad 是什么,我都将 Checkbox 的值视为 false
    • 我还没有机会看看这是否是一个解决方案,但我会告诉你这是否正确,谢谢。
    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-10-16
    • 2013-03-25
    相关资源
    最近更新 更多