验证控件
1、ASP.NET中包含6个验证控件
RequiredFieldValidator--------用于要求用户填写表单时必须输入的值,如果用户没有填写提示:不能为空
RangeValidator---用于检测一个值是否在确定的最大值和最小值之间
CompareValidator----用于比较一个值和另一个值或者数据类型的检测
RegularExpressionValidator----用于比较一个值和正则表达式
CustomValidator----用于执行自定义验证
ValidationSummary----用于在页面显示所有验证错误的摘要
2、 验证控件可以关联到任何一个ASP.NET中的表单控件,比如说希望要求用户向TextBox控件输入一个值,可以将一个RequiredFieldValidator控件关联到这个TextBox控件。
方法是设置RequiredFieldValidator的ControlToValidate属性为关联控件的ID
<asp:RequiredFieldValidator ID="rfvProductName" runat="server" Text="(不?能ü为a空?)" ControlToValidate="txtProductName"></asp:RequiredFieldValidator>
实例1:使用RequiredFieldValidator和CompareValidator验证控件
页面:RequiredFieldValidator.aspx 关键代码
<form id="form1" runat="server">
<div>
<fieldset>
<legend>订单窗口</legend>
<asp:Label ID="lblProductName" runat="server" Text="货物名称" AssociatedControlID="txtProductName"></asp:Label>
<asp:TextBox ID="txtProductName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvProductName" runat="server" Text="(不能为空)" ControlToValidate="txtProductName"></asp:RequiredFieldValidator>
<br /><br />
<asp:Label ID="lblProductPrice" runat="server" Text="货物价格" AssociatedControlID="txtProductPrice"></asp:Label>
<asp:TextBox ID="txtProductPrice" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvProductPrice" runat="server" Text="(不能为空)" ControlToValidate="txtProductPrice"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="cvProductPrice" runat="server" Text="(请输入货币符号)" Operator="DataTypeCheck" Type="Currency" ControlToValidate="txtProductPrice"></asp:CompareValidator>
<br /><br />
<asp:Label ID="lblProductQuantity" runat="server" Text="货物数量" AssociatedControlID="txtProductQuantity"></asp:Label>
<asp:TextBox ID="txtProductQuantity" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvProductQuantity" runat="server" Text="(不能为空)" ControlToValidate="txtProductQuantity"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="cvProductQuantity" runat="server" Text="(必须输入整数)" Operator="DataTypeCheck" Type="Integer" ControlToValidate="txtProductQuantity"></asp:CompareValidator>
<br /><br />
<asp:Button ID="btnSubmit" runat="server" Text="提交" onclick="btnSubmit_Click" />
</fieldset>
<asp:Label ID="lblResult" runat="server"></asp:Label>
</div>
</form>
后台RequiredValidator.aspx.cs关键代码
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblResult.Text = @"货物名称是:" + txtProductName.Text + "<br />" + "货物价格是:" + txtProductPrice.Text + "<br />" + "货物数量是:" + txtProductQuantity.Text;
}
}
注意:CompareValidator控件的关键属性: ControlToValidator属性为验证关联的控件ID 、Operator属性设置为DataTypeCheck 、Type枚举有Integer等
3、使用Page.IsValid
处理含有验证控件的表单数据提交,需要检测Page.IsValid属性。每一个验证控件都是包含一个IsValid属性,如果没有验证错误,这个属性返回True。如果页面中所有验证控件的IsValid属性都返回True,那么Page.IsValid属性返回True。
4、设置Display属性
所有的验证控件都含有Display属性,用来决定如何呈现验证错误信息。该属性有三个枚举值:
1、Static
2、Dynamic
3、None
5、突出显示验证错误
验证控件显示验证错误设置的是它的Text属性值
实例:设置Text值为一张图片 Text=”<img src=’~’ alt=”string” />” 所以当TextBox输入错误时显示的错误信息是一张图片
<asp:Label ID="lblName" runat="server" Text="姓名" AssociatedControlID="txtName"></asp:Label>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvName" runat="server" Display="Dynamic" ControlToValidate="txtName" Text="<img src='文字1.png' alt='错误信息' height='20' width='20' />"></asp:RequiredFieldValidator>
<asp:Button ID="btnSubmit" runat="server" Text="提交" onclick="btnSubmit_Click" />
<br />
<asp:Label ID="lblShow" runat="server"></asp:Label>
6、强调错误的另一种方式是设置验证控件的SetFocusOnError为True,当存在验证错误时,表单焦点会自动移到该验证控件所关联的控件上。默认情况下是False.
7、使用验证组
如果想创建一个同时包含登录和注册表单的页面,登录表单放在左栏,注册表单放在右栏。两个表单都包含验证控件。并且要求两个表单验证不相互干扰。这样就用到了验证组的概念。验证组用于把先关联的表单字段组合在一起。不受别的表单干扰。
要想使用验证组需要在设置一组验证控件和Buttont提交控件的属性ValidationGroup为相同值.
实例:一个页面同时可以同时验证登录界面和注册界面
ValidationGroup.aspx页面关键代码
<form id="form1" runat="server">
<div class="column">
<fieldset>
<legend>登录</legend>
<p>如果您已经有账户,请直接登录</p>
<asp:Label ID="lblLoginName" runat="server" Text="用户" AssociatedControlID="txtLoginName" ></asp:Label>
<asp:TextBox ID="txtLoginName" runat="server" Width="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvLoginName" runat="server" ControlToValidate="txtLoginName" Text="用户不为空" ValidationGroup="LoginGroup" SetFocusOnError="true"></asp:RequiredFieldValidator>
<br /><br />
<asp:Label ID="lblLoginPassword" runat="server" Text="密码" AssociatedControlID="txtLoginPassword"></asp:Label>
<asp:TextBox ID ="txtLoginPassword" runat="server" TextMode="Password" Width="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvLoginPassword" runat="server" ControlToValidate="txtLoginPassword" Text="密码不为空" ValidationGroup="LoginGroup" SetFocusOnError="true"></asp:RequiredFieldValidator>
<br /><br />
<asp:Button ID="btnLogin" runat="server" Text="登录" onclick="btnLogin_Click" ValidationGroup="LoginGroup" />
<br />
<asp:Label ID="lblLoginResult" runat="server"></asp:Label>
</fieldset>
</div>
<div class="column">
<fieldset>
<legend>注册</legend>
<p>如果您现在还没账户,请先注册</p>
<asp:Label ID="lblRegisterName" runat="server" Text="用户" AssociatedControlID="txtRegisterName"></asp:Label>
<asp:TextBox ID="txtRegisterName" runat="server" Width="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvRegisterName" runat="server" ControlToValidate="txtRegisterName" Text="用户不能为空" ValidationGroup="RegisterGroup" SetFocusOnError="true"></asp:RequiredFieldValidator>
<br /><br />
<asp:Label ID="lblRegisterPassword" runat="server" Text="密码" AssociatedControlID="txtRegisterPassword"></asp:Label>
<asp:TextBox ID ="txtRegisterPassword" runat="server" TextMode="Password" Width="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvRegisterPassword" runat="server" ControlToValidate="txtRegisterPassword" Text="密码不能为空" ValidationGroup="RegisterGroup" SetFocusOnError="true"></asp:RequiredFieldValidator>
<br /><br />
<asp:Button ID="btnRegister" runat="server" Text="注册" onclick="btnRegister_Click" ValidationGroup="RegisterGroup" />
<br />
<asp:Label ID="lblRegisterResult" runat="server"></asp:Label>
</fieldset>
</div>
</form>
ValidationGroup.aspx.cs关键代码
protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblLoginResult.Text ="登录用户:"+txtLoginName.Text+"<br />"+"登录密码:"+txtLoginPassword.Text;
}
}
protected void btnRegister_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblRegisterResult.Text ="注册用户:"+txtRegisterName.Text+"<br />"+"注册密码:"+txtRegisterPassword.Text;
}
}
8、禁用验证
所有的按钮控件---Button控件、LinkButton控件和ImageButton控件都有CausesValidation属性。如果赋值False给该属性,那么点击这个按钮就会绕过页面中所有的验证。
绕过验证对取消按钮很有用。
实例:页面中有一个取消按钮,用于把用户重定向回Default.aspx页面 设置了取消的Button控件的CausesValidation=”false”
9、使用RequiredFieldValidator控件
RequiredFieldValidator控件用于要求用户在提交表单前为表单字段输入值。使用此控件必须设置两个重要的属性。
ControlToValidate--被验证的表单字段的ID
Text---验证失败时显示的错误信息
SetFocusOnError---当为True时验证失败自动跳转到被验证控件上。
10、使用CompareValidator控件
CompareValidator控件可用于执行三种不同类型的验证任务。
1、执行数据类型检测
2、输入表单字段的值和一个固定值之间进行比较
3、比较一个表单字段的值和另一个表单字段的值。如检测输入的会议开始日期是否小于输入的会议结束日期值
CompareValidator控件的6个重要属性
ControlToValidate---被验证的表单字段的ID
Text---验证失败时显示的错误信息
Operator---所执行的比较类型,可以是Date,String,Double,Currency,Integer
Type---比较的数据类型,可以是String,Date,Double,Currency,Integer
ControlToCompare---所比较的控件的ID
<fieldset>
<legend>会议记录</legend>
<asp:Label ID="lblStartDate" runat="server" Text="会议开始日期"></asp:Label>
<asp:TextBox ID="txtStartDate" runat="server"></asp:TextBox>
<br />
<asp:Label ID="lblEndDate" runat="server" Text="会议结束日期"></asp:Label>
<asp:TextBox ID="txtEndDate" runat="server"></asp:TextBox>
<asp:CompareValidator ID="cvDate" runat="server" Text="会议结束日期必须要比会议开始日期大" ControlToValidate="txtEndDate" ControlToCompare="txtStartDate" Operator="GreaterThan" Type="Date"></asp:CompareValidator>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="提交" onclick="btnSubmit_Click" />
</fieldset>
</div>
</form>
11、使用ValidationSummary控件
ValidationSummary控件用于在页面中显示所有的验证错误列表
验证控件显示错误信息使用Text属性,而如果要使用ValidationSummary控件显示错误列表则在验证控件中使用ErrorMessage属性。
实例:
<script runat="server">
protected void btnSubmit_Click(Object sender, EventArgs e)
{
if (Page.IsValid)
{
lblResult.Text = "登录成功";
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<fieldset>
<legend>ValidationSummary使用</legend>
<asp:ValidationSummary ID="vsContent" runat="server" HeaderText="错误信息" />
<asp:Label ID="lblName" runat="server" Text="用户"></asp:Label>
<asp:TextBox ID="txtName" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvName" runat="server" ErrorMessage="用户必填!" ControlToValidate="txtName"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="测试" OnClick="btnSubmit_Click" />
<asp:Label ID="lblResult" runat="server"></asp:Label>
</fieldset>
</div>
</form>
</body>
</html>
使用ValidationSummary控件错误信息既会显示在页面中又会显示在ValidationSummary控件中。
ValidationSummary控件支持下列属性
DisplayMode---用于指定如何格式化错误信息
HeaderText---用于在验证摘要上方显示标题文本
ShowMessagebox--用于显示一个弹出警告对话框 如果值为True
ShowSummary---用于隐藏页面中的验证摘要 如果值为True
注意:如果把ValidationSummary控件的ShowMessageBox属性设为True,并把ShowSummary属性设为False,RequiredFieldValidator控件的Display设为None,那么验证摘要只显示在警告对话框中。