2012-03-07 60 views
0

我有一个自定义的用户控件,它包含几个带有验证器的文本框。基于CheckBox,具有相应Validator的一个TextBox是可选的。伪:UserControl有条件的验证方法?

我Control.ascx

<asp:TextBox id="txtAddress" /> 
<asp:Validator id="valAddress" /> 

<asp:CheckBox id="condition" /> 
<asp:TextBox id="txtConditional" /> 
<asp:Validator id="valConditional" ValidationGroup="ConditionalGroup" /> 

我Control.ascx.cs

public void Validate() { 
    if(condition.Checked) { 
     Page.Validate("ConditionalGroup"); 
    } 
} 

我也有一个网页,其中基本上是这样的:

Page.aspx

<my:Control id="myControl" /> 

<asp:Button onClick="doPost" /> 

Page.aspx.cs

protected void doPost(object sender, EventArgs e) { 
    myControl.Validate(); //This feels wrong 

    if(Page.IsValid) { 
     //go 
    } 
} 

这一切工作,但我想采取myControl.Validate()线出Page.aspx.cs,并把它放在My Control.ascx.cs。将它放在控件的Page_Load不是一个选项,因为conditional复选框值始终为false。没有可用事件之后Page_LoaddoPost单击处理程序被激发......

感到不对劲来调用自定义Validate功能上Page,我认为它应该在的地方的UserControl归属。这是否在架构上是错误的?有没有另一种解决方案可能通过使用事件处理程序?

+0

子页面上的事件在页面后执行(例外是初始化阶段)。因此,控件的page_load事件位于页面的page_load之后和页面的控件事件之前(例如doPost)。注意:这不能帮助你解决你的具体问题。 – rkw 2012-03-07 09:46:26

+0

结帐:[如何验证UserControl?](http://izlooite.blogspot.com/2010/07/how-to-validate-user-control.html) – 2012-04-05 05:54:43

回答

2

只有当用户选中该复选框时,才可以尝试启用验证程序。如果取消选中验证器,则禁用该验证器。这必须在用户控制中完成。它可以在客户端或服务器端完成。通过这种方式,页面将验证为页面启用的所有验证器。