CustomValidator ServerValidate方法不会触发

时间:2012-04-16 10:27:19

标签: c# asp.net customvalidator

我在表单上添加了CustomValidator。我没有设置ControlToValidate属性。在ServerValidate事件中,我写了以下内容:

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

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

  1. 按钮和ValidationGroup的{​​{1}}属性相同
  2. 我尝试在按钮和CustomValidator中删除此属性,仍然无效。
  3. 似乎有形式的东西。我只是在表单上放了CustomValidator,除了设置CustomValidator事件方法外,不要触及任何属性。

    编辑:这是aspx部分:

    ServerValidate

2 个答案:

答案 0 :(得分:23)

尝试通过Page.Validate

强制在按钮点击处理程序中进行验证
protected void Button1_Click(Object sender, EventArgs e)
{
    Page.Validate();
    if(Page.IsValid)
    {
       // servervalidate should have been called
    }
}

修改(来自评论):

如果您希望自定义验证程序验证控件中是否未输入/选择任何内容,则需要将ValidateEmptyText设置为true。您也可以让CustomValidator替换RequiredFieldValidators

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

答案 1 :(得分:1)

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

以下是可以使CustomVCalidator和其他内置验证器同时工作的方法。:

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

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