我有一个自定义控件,其中包含多个文本框字段和一个复选框。
如果选中该复选框,并且用户提交表单,我需要允许它们继续,如果文本框为空(并选中复选框)。
我必须在没有javascript的情况下实现这一点。
问题是,在自定义控件的OnInit事件中,我连接文本框及其验证器,我无法访问复选框的值。
我一直在尝试覆盖复选框的uniqueid,以便在自定义控件的OnInit事件中,如果this.Context.Request.Form [“CheckboxId”] =“On”,我可以禁用所需的fieldvalidators,但是我重写了viewstate停止工作的复选框的uniqueID。
我想到的另一件事是拥有一个自定义的requiredfieldvalidator,它在构造函数中使用Checkbox,如果值为false则被禁用。
答案 0 :(得分:1)
您是否尝试通过覆盖 Control.OnLoad 方法在 Control.Load 事件期间执行控制初始化逻辑?
在控制生命周期的那个阶段,您应该能够访问CheckBox的值
另外,如果要禁用验证,则无需禁用所有 Validator 控件。相反,您只需在提交表单的按钮上将 Button.CausesValidation 属性设置为 False 即可。
<强>更新强>
这听起来像是在构建一个用户控件,这是一个复杂的控件,由一组简单的控件组成一个整体。
如果你想在代码中完全这样做,就像使用自定义控件一样,您应该继承CompositeControl类。这给你两全其美。然后通过覆盖CreateChildControls方法进行子控件初始化。