我在我的表格上放了一个CustomValidator。我没有设置它的ControlToValidate属性。在其ServerValidate事件中,我编写了以下内容:
protected void CustomValidator1_ServerValidate(object source,
ServerValidateEventArgs args)
{
args.IsValid = false;
}我在这个方法上放置了一个断点,但它似乎从来没有达到这个目的。但如果我用另一种形式来做这件事,它就像一种魅力。
CustomValidator的ValidationGroup属性都是相同的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" />发布于 2012-04-16 10:43:49
尝试通过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上的验证程序命令决定是否调用自定义验证器的单独验证,如果先前的验证器已经生成了Page.IsValid=false。或者ASP.NET是如此的聪明,以至于它假设SeverValidate比一个简单的文本为空的检查更昂贵。
发布于 2012-04-16 13:09:34
我还想为那些同时使用CustomValidators和RequiredFieldValidators的人提供更多的帮助。应该考虑到客户端验证是首先进行的。只有在PostBack之后才会进行服务器端验证。我肯定您明白了,但万一这还不太清楚:这意味着,首先,绑定到某些客户端的所有控件都必须有效,才能让回发发生。在佩奇之后。IsValid是真正的服务器端内容,会发生并回发任何更改,其中包括服务器端验证消息。
因此,下面是使CustomVCalidators和其他内置的验证器同时工作的方法。
https://stackoverflow.com/questions/10172406
复制相似问题