5.17 验证控件
ASP.NET提供了强大的验证控件,它可以验证服务器控件中用户的输入,并在验证失败的情况下显示一条自定义错误消息。验证控件直接在客户端执行,用户提交后执行相应的验证无需使用服务器端进行验证操作,从而减少了服务器与客户端之间的往返过程。
5.17.1 表单验证控件(RequiredFieldValidator)
在实际的应用中,如在用户填写表单时,有一些项目是必填项,例如用户名和密码。在传统的ASP中,当用户填写表单后,页面需要被发送到服务器并判断表单中的某项HTML控件的值是否为空,如果为空,则返回错误信息。在ASP.NET中,系统提供了RequiredFieldValidator验证控件进行验证。使用RequiredFieldValidator控件能够指定某个用户在特定的控件中必须提供相应的信息,如果不填写相应的信息,RequiredFieldValidator控件就会提示错误信息,RequiredFieldValidator控件示例代码如下所示。
在进行验证时,RequiredFieldValidator控件必须绑定一个服务器控件,在上述代码中,验证控件RequiredFieldValidator控件的服务器控件绑定为TextBox1,当TextBox1中的值为空时,则会提示自定义错误信息“必填字段不能为空”,如图5-53所示。
图5-53 RequiredFieldValidator验证控件
当姓名选项未填写时,会提示必填字段不能为空,并且该验证在客户端执行。当发生此错误时,用户会立即看到该错误提示而不会立即进行页面提交,当用户填写完成并再次单击按钮控件时,页面才会向服务器提交。
5.17.2 比较验证控件(CompareValidator)
比较验证控件对照特定的数据类型来验证用户的输入。因为当用户输入用户信息时,难免会输入错误信息,如当需要了解用户的生日时,用户很可能输入了其他的字符串。CompareValidator比较验证控件能够比较控件中的值是否符合开发人员的需要。CompareValidator控件的特有属性如下所示:
?1)ControlToCompare:以字符串形式输入的表达式。要与另一控件的值进行比较。
?2)Operator:要使用的比较。
?3)Type:要比较两个值的数据类型。
?4)ValueToCompare:以字符串形式输入的表达式。
当使用CompareValidator控件时,可以方便的判断用户是否正确输入,示例代码如下所示。
上述代码判断TextBox1的输入的格式是否正确,当输入的格式错误时,会提示错误,如图5-54所示。
图5-54 CompareValidator验证控件
CompareValidator验证控件不仅能够验证输入的格式是否正确,还可以验证两个控件之间的值是否相等。如果两个控件之间的值不相等,CompareValidator验证控件同样会将自定义错误信息呈现在用户的客户端浏览器中。
5.17.3 范围验证控件(RangeValidator)
范围验证控件(RangeValidator)可以检查用户的输入是否在指定的上限与下限之间。通常情况下用于检查数字、日期、货币等。范围验证控件(RangeValidator)控件的常用属性如下所示。
?1)MinimumValue:指定有效范围的最小值。
?2)MaximumValue:指定有效范围的最大值。
?3)Type:指定要比较的值的数据类型。
通常情况下,为了控制用户输入的范围,可以使用该控件。当输入用户的生日时,今年是2008年,那么用户就不应该输入2009年,同样基本上没有人的寿命会超过100,所以对输入的日期的下限也需要进行规定,示例代码如下所示。
上述代码将MinimumValue属性值设置为1990/1/1,并能将MaximumValue的值设置为2009/1/1,当用户的日期低于最小值或高于最高值时,则提示错误,如图5-55所示。
图5-55 RangeValidator验证控件
注意:RangeValidator验证控件在进行控件的值的范围的设定时,其范围不仅仅可以是一个整数值,同样还能够是时间、日期等值。
5.17.4 正则验证控件(RegularExpressionValidator)
在上述控件中,虽然能够实现一些验证,但是验证的能力是有限的,例如在验证的过程中,只能验证是否是数字,或者是否是日期。也可能在验证时,只能验证一定范围内的数值,虽然这些控件提供了一些验证功能,但却限制了开发人员进行自定义验证和错误信息的开发。为实现一个验证,很可能需要多个控件同时搭配使用。
正则验证控件(RegularExpressionValidator)就解决了这个问题,正则验证控件的功能非常的强大,它用于确定输入的控件的值是否与某个正则表达式所定义的模式相匹配,如电子邮件、电话号码以及序列号等。
正则验证控件(RegularExpressionValidator)常用的属性是ValidationExpression,它用来指定用于验证的输入控件的正则表达式。客户端的正则表达式验证语法和服务端的正则表达式验证语法不同,因为在客户端使用的是JSript正则表达式语法,而在服务器端使用的是Regex类提供的正则表达式语法。使用正则表达式能够实现强大字符串的匹配并验证用户的输入的格式是否正确,系统提供了一些常用的正则表达式,开发人员能够选择相应的选项进行规则筛选,如图5-56所示。
图5-56 系统提供的正则表达式
当选择了正则表达式后,系统自动生成的HTML代码如下所示。
运行后当用户单击按钮控件时,如果输入的信息与相应的正则表达式不匹配,则会提示错误信息,如图5-57所示。
图5-57 RegularExpressionValidator验证控件
同样,开发人员也可以自定义正则表达式来规范用户的输入。使用正则表达式能够加快验证速度并在字符串中快速匹配,而另一方面,使用正则表达式能够减少复杂的应用程序的功能开发和实现。
注意:在用户输入为空时,其他的验证控件都会验证通过。所以,在验证控件的使用中,通常需要同表单验证控件(RequiredFieldValidator)一起使用。
5.17.5 自定义逻辑验证控件(CustomValidator)
自定义逻辑验证控件(CustomValidator)允许使用自定义的验证逻辑创建验证控件。例如,可以创建一个验证控件判断用户输入的是否包含“.”号,示例代码如下所示。
上述代码不仅使用了验证控件自身的验证,也使用了用户自定义验证,运行结果如图5-58所示。
图5-58 CustomValidator验证控件
从CustomValidator验证控件的验证代码可以看出,CustomValidator验证控件可以在服务器上执行验证检查。如果要创建服务器端的验证函数,则处理CustomValidator控件的ServerValidate事件。使用传入的ServerValidateEventArgs的对象的IsValid字段来设置是否通过验证。
而CustomValidator控件同样也可以在客户端实现,该验证函数可用VBScript或Jscript来实现,而在CustomValidator控件中需要使用ClientValidationFunction属性指定与CustomValidator控件相关的客户端验证脚本的函数名称进行控件中的值的验证。
5.17.6 验证组控件(ValidationSummary)
验证组控件(ValidationSummary)能够对同一页面的多个控件进行验证。同时,验证组控件(ValidationSummary)通过ErrorMessage属性为页面上的每个验证控件显式错误信息。验证组控件(ValidationSummary)的常用属性如下所示。
?1)DisplayMode:摘要可显示为列表,项目符号列表或单个段落。
?2)HeaderText:标题部分指定一个自定义标题。
?3)ShowMessageBox:是否在消息框中显示摘要。
?4)ShowSummary:控制是显示还是隐藏ValidationSummary控件。
验证控件能够显示页面的多个控件产生的错误,示例代码如下所示。
运行结果如图5-59所示。
图5-59 ValidationSummary验证控件
当有多个错误发生时,ValidationSummary控件能够捕获多个验证错误并呈现给用户,这样就避免了一个表单需要多个验证时需要使用多个验证控件进行绑定,使用ValidationSummary控件就无需为每个需要验证的控件进行绑定。
5.17.1 表单验证控件(RequiredFieldValidator)
在实际的应用中,如在用户填写表单时,有一些项目是必填项,例如用户名和密码。在传统的ASP中,当用户填写表单后,页面需要被发送到服务器并判断表单中的某项HTML控件的值是否为空,如果为空,则返回错误信息。在ASP.NET中,系统提供了RequiredFieldValidator验证控件进行验证。使用RequiredFieldValidator控件能够指定某个用户在特定的控件中必须提供相应的信息,如果不填写相应的信息,RequiredFieldValidator控件就会提示错误信息,RequiredFieldValidator控件示例代码如下所示。
+展开
-HTML
<body>
<form id="form1" runat="server">
<div>
姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="必填字段不能为空"></asp:RequiredFieldValidator>
<br >
密码:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
<br >
</div>
</form>
</body>
<form id="form1" runat="server">
<div>
姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="必填字段不能为空"></asp:RequiredFieldValidator>
<br >
密码:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
<br >
</div>
</form>
</body>
在进行验证时,RequiredFieldValidator控件必须绑定一个服务器控件,在上述代码中,验证控件RequiredFieldValidator控件的服务器控件绑定为TextBox1,当TextBox1中的值为空时,则会提示自定义错误信息“必填字段不能为空”,如图5-53所示。
图5-53 RequiredFieldValidator验证控件
当姓名选项未填写时,会提示必填字段不能为空,并且该验证在客户端执行。当发生此错误时,用户会立即看到该错误提示而不会立即进行页面提交,当用户填写完成并再次单击按钮控件时,页面才会向服务器提交。
5.17.2 比较验证控件(CompareValidator)
比较验证控件对照特定的数据类型来验证用户的输入。因为当用户输入用户信息时,难免会输入错误信息,如当需要了解用户的生日时,用户很可能输入了其他的字符串。CompareValidator比较验证控件能够比较控件中的值是否符合开发人员的需要。CompareValidator控件的特有属性如下所示:
?1)ControlToCompare:以字符串形式输入的表达式。要与另一控件的值进行比较。
?2)Operator:要使用的比较。
?3)Type:要比较两个值的数据类型。
?4)ValueToCompare:以字符串形式输入的表达式。
当使用CompareValidator控件时,可以方便的判断用户是否正确输入,示例代码如下所示。
+展开
-HTML
<body>
<form id="form1" runat="server">
<div>
请输入生日:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br >
毕业日期:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server"
ControlToCompare="TextBox2" ControlToValidate="TextBox1"
CultureInvariantValues="True" ErrorMessage="输入格式错误!请改正!"
Operator="GreaterThan"
Type="Date">
</asp:CompareValidator>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
<br >
</div>
</form>
</body>
<form id="form1" runat="server">
<div>
请输入生日:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br >
毕业日期:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server"
ControlToCompare="TextBox2" ControlToValidate="TextBox1"
CultureInvariantValues="True" ErrorMessage="输入格式错误!请改正!"
Operator="GreaterThan"
Type="Date">
</asp:CompareValidator>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
<br >
</div>
</form>
</body>
上述代码判断TextBox1的输入的格式是否正确,当输入的格式错误时,会提示错误,如图5-54所示。
图5-54 CompareValidator验证控件
CompareValidator验证控件不仅能够验证输入的格式是否正确,还可以验证两个控件之间的值是否相等。如果两个控件之间的值不相等,CompareValidator验证控件同样会将自定义错误信息呈现在用户的客户端浏览器中。
5.17.3 范围验证控件(RangeValidator)
范围验证控件(RangeValidator)可以检查用户的输入是否在指定的上限与下限之间。通常情况下用于检查数字、日期、货币等。范围验证控件(RangeValidator)控件的常用属性如下所示。
?1)MinimumValue:指定有效范围的最小值。
?2)MaximumValue:指定有效范围的最大值。
?3)Type:指定要比较的值的数据类型。
通常情况下,为了控制用户输入的范围,可以使用该控件。当输入用户的生日时,今年是2008年,那么用户就不应该输入2009年,同样基本上没有人的寿命会超过100,所以对输入的日期的下限也需要进行规定,示例代码如下所示。
+展开
-HTML
<div>
请输入生日:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="超出规定范围,请重新填写"
MaximumValue="2009/1/1" MinimumValue="1990/1/1" Type="Date">
</asp:RangeValidator>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
请输入生日:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="超出规定范围,请重新填写"
MaximumValue="2009/1/1" MinimumValue="1990/1/1" Type="Date">
</asp:RangeValidator>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
上述代码将MinimumValue属性值设置为1990/1/1,并能将MaximumValue的值设置为2009/1/1,当用户的日期低于最小值或高于最高值时,则提示错误,如图5-55所示。
图5-55 RangeValidator验证控件
注意:RangeValidator验证控件在进行控件的值的范围的设定时,其范围不仅仅可以是一个整数值,同样还能够是时间、日期等值。
5.17.4 正则验证控件(RegularExpressionValidator)
在上述控件中,虽然能够实现一些验证,但是验证的能力是有限的,例如在验证的过程中,只能验证是否是数字,或者是否是日期。也可能在验证时,只能验证一定范围内的数值,虽然这些控件提供了一些验证功能,但却限制了开发人员进行自定义验证和错误信息的开发。为实现一个验证,很可能需要多个控件同时搭配使用。
正则验证控件(RegularExpressionValidator)就解决了这个问题,正则验证控件的功能非常的强大,它用于确定输入的控件的值是否与某个正则表达式所定义的模式相匹配,如电子邮件、电话号码以及序列号等。
正则验证控件(RegularExpressionValidator)常用的属性是ValidationExpression,它用来指定用于验证的输入控件的正则表达式。客户端的正则表达式验证语法和服务端的正则表达式验证语法不同,因为在客户端使用的是JSript正则表达式语法,而在服务器端使用的是Regex类提供的正则表达式语法。使用正则表达式能够实现强大字符串的匹配并验证用户的输入的格式是否正确,系统提供了一些常用的正则表达式,开发人员能够选择相应的选项进行规则筛选,如图5-56所示。
图5-56 系统提供的正则表达式
当选择了正则表达式后,系统自动生成的HTML代码如下所示。
+展开
-HTML
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="正则不匹配,请重新输入!"
ValidationExpression="\d{17}[\d|X]|\d{15}">
</asp:RegularExpressionValidator>
ControlToValidate="TextBox1" ErrorMessage="正则不匹配,请重新输入!"
ValidationExpression="\d{17}[\d|X]|\d{15}">
</asp:RegularExpressionValidator>
运行后当用户单击按钮控件时,如果输入的信息与相应的正则表达式不匹配,则会提示错误信息,如图5-57所示。
图5-57 RegularExpressionValidator验证控件
同样,开发人员也可以自定义正则表达式来规范用户的输入。使用正则表达式能够加快验证速度并在字符串中快速匹配,而另一方面,使用正则表达式能够减少复杂的应用程序的功能开发和实现。
注意:在用户输入为空时,其他的验证控件都会验证通过。所以,在验证控件的使用中,通常需要同表单验证控件(RequiredFieldValidator)一起使用。
5.17.5 自定义逻辑验证控件(CustomValidator)
自定义逻辑验证控件(CustomValidator)允许使用自定义的验证逻辑创建验证控件。例如,可以创建一个验证控件判断用户输入的是否包含“.”号,示例代码如下所示。
+展开
-C#
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = args.Value.ToString().Contains("."); //设置验证程序,并返回布尔值
}
protected void Button1_Click(object sender, EventArgs e)//用户自定义验证
{
if (Page.IsValid)//判断是否验证通过
{
Label1.Text = "验证通过";//输出验证通过
}
else
{
Label1.Text = "输入格式错误";//提交失败信息
}
}
{
args.IsValid = args.Value.ToString().Contains("."); //设置验证程序,并返回布尔值
}
protected void Button1_Click(object sender, EventArgs e)//用户自定义验证
{
if (Page.IsValid)//判断是否验证通过
{
Label1.Text = "验证通过";//输出验证通过
}
else
{
Label1.Text = "输入格式错误";//提交失败信息
}
}
上述代码不仅使用了验证控件自身的验证,也使用了用户自定义验证,运行结果如图5-58所示。
图5-58 CustomValidator验证控件
从CustomValidator验证控件的验证代码可以看出,CustomValidator验证控件可以在服务器上执行验证检查。如果要创建服务器端的验证函数,则处理CustomValidator控件的ServerValidate事件。使用传入的ServerValidateEventArgs的对象的IsValid字段来设置是否通过验证。
而CustomValidator控件同样也可以在客户端实现,该验证函数可用VBScript或Jscript来实现,而在CustomValidator控件中需要使用ClientValidationFunction属性指定与CustomValidator控件相关的客户端验证脚本的函数名称进行控件中的值的验证。
5.17.6 验证组控件(ValidationSummary)
验证组控件(ValidationSummary)能够对同一页面的多个控件进行验证。同时,验证组控件(ValidationSummary)通过ErrorMessage属性为页面上的每个验证控件显式错误信息。验证组控件(ValidationSummary)的常用属性如下所示。
?1)DisplayMode:摘要可显示为列表,项目符号列表或单个段落。
?2)HeaderText:标题部分指定一个自定义标题。
?3)ShowMessageBox:是否在消息框中显示摘要。
?4)ShowSummary:控制是显示还是隐藏ValidationSummary控件。
验证控件能够显示页面的多个控件产生的错误,示例代码如下所示。
+展开
-HTML
<body>
<form id="form1" runat="server">
<div>
姓名:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="姓名为必填项">
</asp: RequiredFieldValidator>
<br >
身份证:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="身份证号码错误"
ValidationExpression="\d{17}[\d|X]|\d{15}"></asp:RegularExpressionValidator>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
</div>
</form>
</body>
<form id="form1" runat="server">
<div>
姓名:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="姓名为必填项">
</asp: RequiredFieldValidator>
<br >
身份证:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="身份证号码错误"
ValidationExpression="\d{17}[\d|X]|\d{15}"></asp:RegularExpressionValidator>
<br >
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
</div>
</form>
</body>
运行结果如图5-59所示。
图5-59 ValidationSummary验证控件
当有多个错误发生时,ValidationSummary控件能够捕获多个验证错误并呈现给用户,这样就避免了一个表单需要多个验证时需要使用多个验证控件进行绑定,使用ValidationSummary控件就无需为每个需要验证的控件进行绑定。
加支付宝好友偷能量挖...