我有一个相当大的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;
}
}
据我所知,服务器端验证方法根本没有触发。页面上的所有其他验证控件似乎都可以正常工作。
有人可以帮忙吗?
答案 0 :(得分:1)
那么,如果您只需要验证它们是否为数字,为什么不使用RegexValidator呢?它可以节省你去服务器的路程。
MSDN article on the above,包含常用正则表达式列表,包括数字正则表达式。
答案 1 :(得分:1)
客户端验证器(例如RequiredFieldValidators)是否有效?服务器端验证器仅在所有客户端验证器有效时才触发。
修改强>
大多数验证器(如RequiredFieldValidator或RegularExpressionValidator)都在客户端和服务器端执行验证。当客户端验证失败时,提交将被取消,因此仅服务器端验证不会触发。
对于CustomValidator,如果需要,您必须明确添加客户端验证。
答案 2 :(得分:0)
这篇文章早已不复存在,但我遇到了类似的问题并将其缩小为.NET漏洞。我的自定义验证器位于一个面板中,我在编程时将页面加载中的可见性设置为false,稍后在我的代码中将其设置为true。对我来说不应该有所作为,但是当我在.aspx文件中将面板的默认值设置为false时,因此从未将代码中的可见性设置为false,它可以正常工作。
奇怪的是,我有一个取消按钮,将可见性设置为false,没有其他问题。