【问题标题】:CustomValidator control not working in .NetCustomValidator 控件在 .Net 中不起作用
【发布时间】:2012-04-22 19:58:39
【问题描述】:

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

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

有人可以帮忙吗?

【问题讨论】:

  • 您是否尝试将txtWorkPhone 控件添加到reg ValidationGroup?
  • 是的,我也试过了,没有任何区别

标签: .net validation customvalidator


【解决方案1】:

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

MSDN article on the above,带有常用正则表达式的列表,包括一个数字。

【讨论】:

  • 我认为 RegEx 会迫使我拥有一个价值。这些字段是可选的,因此只有在输入值时才应进行验证。
  • ^\d*$ 应该允许空字符或任意数量的数字字符
【解决方案2】:

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

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

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

【讨论】:

  • 我没有使用任何客户端验证
  • ARequiredFieldValidator 本地执行客户端验证,因此除非所有其他验证器都通过,否则您的 CustomValidator 不会触发。
  • 感谢 SouthShoreAK,就是这样。只有在所有其他表单也都经过验证后,验证才会开始。它并不理想,因为我希望一次获得所有验证消息,但它现在可以工作了。再次感谢!
  • RegularExpressionValidators 将与您的RequiredFieldValidators 同时触发,让您一次完成所有操作。我不想咄咄逼人,我只是想为你节省一些代码。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多