CustomValidator控件无法在.Net中运行

时间:2012-04-10 14:00:38

标签: .net validation customvalidator

我有一个相当大的ASPX表单,有很多文本框和下拉列表可以填写。大多数文本框都有RequiredFieldValidator控件,这些工作正常。

但是,我有3个家庭,移动和工作电话号码的文本框。每个文本框都是可选的,但如果填写,则该值必须为数字。此时我不需要验证电话号码的格式,只需确保它是数字。

其中一个字段的客户端代码如下所示:

<asp:Label ID="lblWorkPhone" runat="server" AssociatedControlID="txtWorkPhone" Text="<%$ Resources: Registration, WorkPhone %>" /><br />
<asp:TextBox ID="txtWorkPhone" runat="server" />
<asp:CustomValidator ID="validateWorkPhone" runat="server" 
                            ValidationGroup="reg" ControlToValidate="txtWorkPhone" ForeColor="Red" 
                            ErrorMessage="<%$ Resources: Registration, HomePhoneNumber %>" 
                            Text="<%$ Resources: Registration, RequireMessage %>" 
                            onservervalidate="validateWorkPhone_ServerValidate" />

服务器端验证方法在这里:

protected void validateWorkPhone_ServerValidate(object source, ServerValidateEventArgs args)
{
    long temp = 0;

    long.TryParse(txtWorkPhone.Text, out temp);

    if (temp == 0)
    {
        args.IsValid = false;
        validateWorkPhone.IsValid = true;
    }
    else
    {
        args.IsValid = true;
        validateWorkPhone.IsValid = false;
    }
}

据我所知,服务器端验证方法根本没有触发。页面上的所有其他验证控件似乎都可以正常工作。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

那么,如果您只需要验证它们是否为数字,为什么不使用RegexValidator呢?它可以节省你去服务器的路程。

MSDN article on the above,包含常用正则表达式列表,包括数字正则表达式。

答案 1 :(得分:1)

客户端验证器(例如RequiredFieldValidators)是否有效?服务器端验证器仅在所有客户端验证器有效时才触发。

修改
大多数验证器(如RequiredFieldValidator或RegularExpressionValidator)都在客户端和服务器端执行验证。当客户端验证失败时,提交将被取消,因此仅服务器端验证不会触发。

对于CustomValidator,如果需要,您必须明确添加客户端验证。

答案 2 :(得分:0)

这篇文章早已不复存在,但我遇到了类似的问题并将其缩小为.NET漏洞。我的自定义验证器位于一个面板中,我在编程时将页面加载中的可见性设置为false,稍后在我的代码中将其设置为true。对我来说不应该有所作为,但是当我在.aspx文件中将面板的默认值设置为false时,因此从未将代码中的可见性设置为false,它可以正常工作。

奇怪的是,我有一个取消按钮,将可见性设置为false,没有其他问题。