1

我有一个相当大的 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;
    }
}

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

有人可以帮忙吗?

4

3 回答 3

1

好吧,如果您只需要验证它们是否为数字,为什么不使用 RegexValidator 呢?它可以节省您前往服务器的时间。

上面的 MSDN 文章,列出了常见的正则表达式,包括一个数字。

于 2012-04-10T14:04:34.303 回答
1

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

编辑
大多数验证器,例如RequiredFieldValidator 或RegularExpressionValidator,都执行客户端和服务器端的验证。当客户端验证失败时,提交被取消,因此仅服务器端验证不会触发。

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

于 2012-04-10T14:15:49.003 回答
0

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

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

于 2013-04-07T17:10:33.463 回答