CustomValidator ServerValidate方法不会触发

我在表单上放了一个CustomValidator 。 我没有设置它的ControlToValidate属性。 在其ServerValidate事件中,我写了以下内容:

 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { args.IsValid = false; } 

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

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

似乎有forms的东西。 我只是在表单上放置一个CustomValidator ,除了设置其ServerValidate事件方法之外,不要触及它的任何属性。

编辑:这是aspx部分:

    

尝试通过Page.Validate强制在按钮单击处理程序中进行Page.Validate

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

编辑 (来自评论):

如果您希望customvalidatorvalidation控件中是否未输入/选择任何内容,则需要将ValidateEmptyText设置为true。 您还可能希望让CustomValidator替换RequiredFieldValidators

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

我还想为那些同时使用CustomValidators和RequiredFieldValidators的人提供更多帮助。 应该考虑到客户端validation首先发生。 并且只有在PostBack之后才会进行服务器端validation。 我确定你得到了它,但以防这个不太清楚:这意味着首先绑定到某些客户端工作validation器的所有控件必须有效才能使Postback发生。 在页面之后。 IsValid是True服务器端的东西发生并回发任何包括服务器端validation消息的更改。

因此,以下是可以使CustomVCalidator和其他内置validation器同时工作的方法:

  1. 将两组validation器设置为在客户端工作。 在这种情况下,我们必须确保对于自定义的valitor,我们将在客户端进行validation的脚本进行间隔。 无需编写脚本并只填写ServerValidate方法,validation将在服务器中进行。即使EnableClientScript属性设置为True也是如此。

  2. 将两组validation器设置为在服务器端工作。 为此,只需将EnableClientScript设置为False即可。 但请注意,这将加载服务器。