CustomValidator ServerValidate方法不会触发

Mik*_*yev 11 c# asp.net customvalidator

CustomValidator在表格上写了一个.我没有设置它的ControlToValidate财产.在它的ServerValidate事件中,我写了以下内容:

protected void CustomValidator1_ServerValidate(object source,      
                                               ServerValidateEventArgs args)
{
    args.IsValid = false;
}
Run Code Online (Sandbox Code Playgroud)

我给这个方法设了一个断点,但似乎从来没有达到这一点.但如果我在另一种形式上这样做,它就像一个魅力.

  1. ValidationGroup两个按钮和属性CustomValidator是相同的
  2. 我尝试在按钮和删除此属性CustomValidator,仍然无法正常工作.

似乎有形式的东西.我只是CustomValidator在表单上添加一个并且除了设置其ServerValidate事件方法之外不要触及它的任何属性.

编辑:这是aspx部分:

 <asp:CustomValidator ID="CustomValidator2" runat="server" 
       ErrorMessage="This is a test" 
   onservervalidate="CustomValidator1_ServerValidate" 
   ValidationGroup="PA"></asp:CustomValidator>


<asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px" 
          onclick="Button1_Click" ValidationGroup="PA" />
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 24

尝试通过以下方式强制在按钮单击处理程序中进行验证Page.Validate:

protected void Button1_Click(Object sender, EventArgs e)
{
    Page.Validate();
    if(Page.IsValid)
    {
       // servervalidate should have been called
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑(来自评论):

如果您希望customvalidator验证控件中是否未输入/选择任何内容,则需要设置ValidateEmptyText为true.您也可能想让CustomValidator替换RequiredFieldValidators.

我假设aspx上的验证器顺序决定了如果先前的Validator已经发出,是否调用了customvalidator的severvalidate Page.IsValid=false.或者ASP.NET非常聪明,它假设SeverValidate比简单的文本空检查更昂贵.

  • 谢谢大家,ValidateEmptyText帮助了我) (3认同)