asp.net验证控件主要用来验证用户输入数据,以确保无用的,未经验证的或矛盾的数据不会被存储到服务器中。
asp.net提供了以下验证控件:
其它验证控件类是从basevalidator
类继承的,因此它们继承了它的属性和方法。 因此,这将有助于查看此基类的属性和方法,这对于所有验证控件都是常见的:
编号 | 方法 | 描述 |
---|---|---|
1 | controltovalidate |
指示要验证的输入控件。 |
2 | display |
指示如何显示错误消息。 |
3 | enableclientscript |
指示是否需要客户端验证。 |
4 | enabled |
启用或禁用验证器。 |
5 | errormessage |
指示错误字符串信息。 |
6 | text |
如果验证失败,将显示此错误文本。 |
7 | isvalid |
指示控件的值是否有效。 |
8 | setfocusonerror |
它表示在无效控制的情况下,焦点应该切换到相关的输入控件。 |
9 | validationgroup |
该控件所属的多个验证器的逻辑组。 |
10 | validate() |
此方法重新验证控件并更新isvalid 属性。 |
requiredfieldvalidator
控件确保所需字段不为空。它通常绑定到一个文本框强制输入到文本框中。
控件的语法如下:
<asp:requiredfieldvalidator id="rfvcandidate"
runat="server" controltovalidate ="ddlcandidate"
errormessage="please choose a candidate"
initialvalue="please choose a candidate">
</asp:requiredfieldvalidator>
rangevalidator
控件验证输入值是否在预定的范围内。
它有三个特定的属性:
编号 | 属性 | 描述 |
---|---|---|
1 | type |
它定义了数据的类型。可用值包括:货币,日期,双精度,整数和字符串。 |
2 | minimumvalue |
它指定范围的最小值。 |
3 | maximumvalue |
它指定范围的最大值。 |
控件的语法如下:
<asp:rangevalidator id="rvclass" runat="server" controltovalidate="txtclass"
errormessage="enter your class (6 - 12)" maximumvalue="12"
minimumvalue="6" type="integer">
</asp:rangevalidator>
comparevalidator
控件将一个控件中的值与另一个控件中的固定值或值进行比较。
它具有以下特定属性:
编号 | 属性 | 描述 |
---|---|---|
1 | type |
它用来指定数据的类型。 |
2 | controltocompare |
它指定要与之比较的输入控件的值。 |
3 | valuetocompare |
它指定了与之比较的常量值。 |
4 | operator |
它指定比较运算符,可用值为:equal ,notequal ,greaterthan ,greaterthanequal ,lessthan ,lessthanequal 和datatypecheck 。 |
该控件的基本语法如下所示:
<asp:comparevalidator id="comparevalidator1" runat="server"
errormessage="comparevalidator">
</asp:comparevalidator>
regularexpressionvalidator
允许通过匹配正则表达式的模式来验证输入文本。正则表达式在validationexpression
属性中设置。
下表总结了正则表达式的常用语法结构:
编号 | 字符转义 | 描述 |
---|---|---|
1 | \b |
匹配一个退格符。 |
2 | \t |
匹配一个制表符。 |
3 | valuetocompare |
它指定了与之比较的常量值。 |
4 | \r |
匹配回车。 |
5 | \v |
匹配垂直制表符。 |
6 | \f |
匹配换页 |
7 | \n |
匹配一个新的行。 |
8 | \ |
转义字符。 |
除了单字符匹配之外,还可以指定一组可以匹配的字符,称为元字符。
编号 | 元字符 | 描述 |
---|---|---|
1 | . |
匹配除\n 之外的任何字符。 |
2 | [abcd] |
匹配集合中的任何字符。 |
3 | [^abcd] |
匹配不是集合中的任何字符。 |
4 | [2-7a-ma-m] |
匹配范围中指定的任何字符。 |
5 | \w |
匹配任何字母数字字符和下划线。 |
6 | \w |
匹配任何非单词字符。 |
7 | \s |
匹配空格字符,如空格,制表符,新行。 |
8 | \s |
匹配任何非空白字符。 |
6 | \d |
匹配任何十进制字符。 |
7 | \d |
匹配任何非十进制字符。 |
可以使用量词来指定的字符可能出现次数。
编号 | 量词 | 描述 |
---|---|---|
1 | * |
零或多个匹配 |
2 | + |
一个或多个匹配。 |
3 | ? |
零个或一个匹配。 |
4 | {n} |
n 个匹配 |
5 | {n,} |
至少n 次匹配 |
6 | {n,m} |
n 到m 次匹配 |
控件的语法如下:
<asp:regularexpressionvalidator id="string" runat="server" errormessage="string"
validationexpression="string" validationgroup="string">
</asp:regularexpressionvalidator>
customvalidator
控件允许为客户端和服务器端验证编写特定于应用程序的自定义验证例程。
客户端验证通过clientvalidationfunction
属性完成。 客户端验证例程应该用浏览器可以理解的脚本语言编写,例如javascript或vbscript。
服务器端验证例程必须从控件的servervalidate
事件处理程序中调用。服务器端验证例程应该用c#
或vb.net等.net
语言编写。
控件的基本语法如下:
<asp:customvalidator id="customvalidator1" runat="server"
clientvalidationfunction=.cvf_func. errormessage="customvalidator">
</asp:customvalidator>
validationsummary
控件不执行任何验证,但显示页面中所有错误的摘要。 摘要显示验证失败的所有验证控件的errormessage
属性的值。
以下两个相互包含的属性列出了错误消息:
控件的语法如下:
<asp:validationsummary id="validationsummary1" runat="server"
displaymode = "bulletlist" showsummary = "true" headertext="errors:" />
复杂的页面在不同的面板中提供不同的信息组。在这种情况下,可能需要为单独的组分别进行验证。这种情况是使用验证组来处理的。
要创建验证组,应该通过设置其validationgroup
属性将输入控件和验证控件放入同一个逻辑组中。
下面的例子描述了一个由所有投票人来填写的表单信息,分成四个信息段,用来选举总统。 在这里,使用验证控件来验证用户输入。
首先打开visual studio,创建一个名称为:validators 的空网站项目,如下图所示 -
在这个项目名称上右键选择:添加 -> 添加新项 ,选择:web窗体 ,存储名称为: default.aspx,如下所示 -
这是设计视图中的表单:
以下是defalut.aspx 文件的内容:
<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" %>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>验证器示例</title>
</head>
<body>
<form id="form1" runat="server">
<table style="width: 66%;">
<tr>
<td class="style1" colspan="3" align="center">
<asp:label id="lblmsg"
text="选择您支持的总统"
runat="server" style="font-weight:bold;"/>
</td>
</tr>
<tr>
<td class="style3" style="width:64px;">
候选人:
</td>
<td class="style2">
<asp:dropdownlist id="ddlcandidate" runat="server" style="width:239px">
<asp:listitem>请选择一个候选人</asp:listitem>
<asp:listitem>渣渣辉</asp:listitem>
<asp:listitem>李布朗</asp:listitem>
<asp:listitem>小布什</asp:listitem>
<asp:listitem>特朗扑</asp:listitem>
</asp:dropdownlist>
</td>
<td>
<asp:requiredfieldvalidator id="rfvcandidate"
runat="server" controltovalidate ="ddlcandidate"
errormessage="请选择一个候选人"
initialvalue="请选择一个候选人">
</asp:requiredfieldvalidator>
</td>
</tr>
<tr>
<td class="style3">
性别:
</td>
<td class="style2">
<asp:radiobuttonlist id="rblhouse" runat="server" repeatlayout="flow">
<asp:listitem>男</asp:listitem>
<asp:listitem>女</asp:listitem>
<asp:listitem>其它</asp:listitem>
</asp:radiobuttonlist>
</td>
<td>
<asp:requiredfieldvalidator id="rfvhouse" runat="server"
controltovalidate="rblhouse" errormessage="选择性别" >
</asp:requiredfieldvalidator>
<br />
</td>
</tr>
<tr>
<td class="style3">
年龄:
</td>
<td class="style2">
<asp:textbox id="txtclass" runat="server"></asp:textbox>
</td>
<td>
<asp:rangevalidator id="rvclass"
runat="server" controltovalidate="txtclass"
errormessage="请填写年龄 (16 - 70)" maximumvalue="70"
minimumvalue="16" type="integer">
</asp:rangevalidator>
</td>
</tr>
<tr>
<td class="style3">
email:
</td>
<td class="style2">
<asp:textbox id="txtemail" runat="server" style="width:250px">
</asp:textbox>
</td>
<td>
<asp:regularexpressionvalidator id="remail" runat="server"
controltovalidate="txtemail" errormessage="请输入电子邮件地址"
validationexpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:regularexpressionvalidator>
</td>
</tr>
<tr>
<td class="style3" align="center" colspan="3">
<asp:button id="btnsubmit" runat="server" onclick="btnsubmit_click"
style="text-align: center;width:140px" text="确认提交"/>
</td>
</tr>
</table>
<asp:validationsummary id="validationsummary1" runat="server"
displaymode ="bulletlist" showsummary ="true" headertext="错误信息提示:" />
</form>
</body>
</html>
以下是defalut.aspx.cs 文件的内容:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
public partial class _default : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
unobtrusivevalidationmode = unobtrusivevalidationmode.none;
}
protected void btnsubmit_click(object sender, eventargs e)
{
if (page.isvalid)
{
lblmsg.text = "感谢支持";
}
else
{
lblmsg.text = "填写所有内容";
}
}
}
执行上面启动项目,可以看到以下结果 -
填写完成表单所有项目,然后提交,得到以下结果 -