2009-04-30 94 views
0

我有一个自定义控件,其中包含多个文本框字段和一个复选框。禁用必填字段验证器复选框的服务器端被选中

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

我必须在没有javascript的情况下执行此操作。

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


我一直在试图重写复选框,以便在自定义控件的事件OnInit的我可以禁用所需fieldvalidators如果this.Context.Request.Form [“CheckboxId”] =“开” UNIQUEID,但只要我覆盖复选框viewstate的uniqueID停止工作。

我想到的另一件事是拥有一个自定义的requiredfieldvalidator,该构造函数使用复选框,如果该值为false,则被禁用。

回答

1

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

作为一个方面说明,如果您想禁用验证,您不一定必须禁用所有验证程序控件。相反,您可以简单地将Button.CausesValidation属性设置为假按钮将提交表单。

UPDATE:
听起来好像要构建用户控制,即由作为一个单元一起工作简单的控制的集合体的复杂的控制。
如果你想完全用代码完成这项工作,就像使用自定义控件一样,你应该继承CompositeControl类。这给你两全其美。子控件的初始化是通过覆盖CreateChildControls方法来完成的。

+1

你有链接到一篇文章,描述如何做到这一点?我见过的所有示例都使用OnInit在自定义控件中添加控件。 – 2009-04-30 17:50:43