第三章 用检验控件执行表单的检验

主要内容:

l 使用客户端检验

l 必填域控件:RequiredFieldValidator

l 检验表达式控件:RegularExpressionValidator

l 比较值控件:CompareValidator

l 检查值范围控件:RangeValidator

l 错误汇总控件:ValidatorSummary

l 自定义检验控件:CustomValidator

l 禁用检验

一、   使用客户端检验

传统上,Web开发人员可以,在服务器端添加表单检验子例程,也可以在客户端代码中添加检验子例程。

客户端检验逻辑的优点是,可以向用户提供快速的反馈。

用户一般比较喜欢客户端检验。

但问题是,并不是所有浏览器都能工作(不是所有浏览器都支持JavaScript)

而,将表单检验逻辑添加到服务器端代码,可以适合任何浏览器,操作更可靠。

ASP.NET检验控件会自动产生客户端和服务器端代码。(如果浏览器支持JavaScript,客户端检验脚步被自动发送到浏览器;如果不支持,自动在服务器端代码实现检验子例程)

这里所述的客户端检验代码只在微软IE4.0以上浏览器有效。(在任何的Navigator都无效)

(一)    配置客户端检验

检验控件要使用一个JavaScript脚本库。(在安装.NET框架时自动安装)

此库位于WebUIValidation.js文件中。(默认此文件在Web服务器wwwroot目录下的aspnet_client目录中)(若找不到此文件,会收到错误”Warning! Unable to find script library ‘WebUIValidation.js’”

注意:WebUIValidation.js文件的准确位置是由你的Machine.config文件决定的,在<webControlsclientScriptsLocation>部分。

使用aspnet_regiis命令行工具,可以安装和卸载脚本库。

Aspnet_regiis –c安装脚本库

Aspnet_regiis –e卸载脚本库

此工具位于你的"winnt"microsoft.net"framework"[version]"目录

(二)    启用和禁用客户端检验

如果,你请求包含检验控件的页面,并且使用IE4.0以上浏览器,那么JavaScript代码就会自动发送到你的浏览器。

l 禁用客户端表单检验,只需在页面顶端添加指令:

<%@ Page ClientTarget=”downlevel” %>

这个指令,不但禁用客户端的表单检验,还会阻止页面上所有ASP.NET控件显示任何非HTML 3.2 兼容的内容(比如页面上表现级联样式表的属性)

注意:ClientTarget属性对应于machine.config文件的<clientTarget>条目,它接受一个字符串值。其中uplevel被定义为IE4.0;downlevel被定义为Unknow browser(即假设不支持级联样式表)

l 禁用各检验控件的客户端检验,可以通过将EnableClientScript属性设为False。(此属性不是所有检验控件共享的,所有可以禁用特定检验控件)

二、   必填域控件:RequiredFieldValidator

可以检查一个控件是否有值。(通常对TextBox控件使用,对其他输入控件也没问题)

属性

说明

ControlToValidate

指定要检验的控件的ID

Display

设置如何显示Text属性中包含的错误信息。

有效值:Static(默认)、Dynamic、None。

EnableClientScript

启用或禁用客户端表单检验。默认True

Enable

同时,启用或禁用,服务器和客户端检验。默认true

ErrorMessage

指定在ValidationSummary控件中显示的错误消息。

若Text属性未被设置,检验控件显示这个错误消息。

InitialValue

获取或设置ControlToValidate属性指定的控件的初始值。

IsValid

当成功通过检验是,此为true;否则为false

Text

设置控件显示的错误消息

方法:

Validate——执行检验并更新IsValide属性

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("Thankyou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>无标题页</title>

</head>

<body>

<form id="form1" runat="server">

<div>

用户名:<br /><asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="txtUsername" Text="必须键入用户名"></asp:RequiredFieldValidator><p />

注释:<br /><asp:TextBox ID="txtComments" runat="server" textmode="MultiLine"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="txtComments" Text="请输入注释"></asp:RequiredFieldValidator>

<p />

<asp:Button ID="Button1" runat="server" Text="submit" OnClick="Button1_Click" />

</div>

</form>

</body>

</html>

注意此句If IsValid Then,其中IsValid是Page对象属性,只有当页面上每个检验控件的IsValid属性都为true,Page.IsValid属性才为true。(也可以检查每个检验控件的IsValid属性)

RequiredFieldValidator控件显示的错误消息由其Text属性决定,默认为红色字体,可以通过格式化属性控制它。还可以通过修改Display属性控制如何显示错误消息。

默认情况下,即使不显示错误消息,错误消息的实际屏幕显示也会被保留,但是如果将Display属性设置为Dynamic,错误消息会推开它周围的任何内容。

与初始值相比较

在RequiredFieldValidator控件中,可以检查用户输入的值是否与初始值不同。

这是可以使用其InitialValue属性。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("ThankYou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>RequiredFieldValidatorInitialValue.aspx</title>

</head>

<body>

<form id="form1" runat="server">

<div>

注释:<br />

<asp:TextBox ID="txtComments" TextMode="MultiLine" Text="输入内容" runat="server" />

<asp:RequiredFieldValidator ID="rfv1" ControlToValidate="txtComments" Text="输入文字。。。" initialValue="输入内容" runat="server" /><%--注意initialValue应该与关联的TextBox.text内容一致--%>

<p />

<asp:Button ID="btn1" Text="提交" runat="server" OnClick="btn1_Click" />

</div>

</form>

</body>

</html>

三、   检验表达式的控件RegularExpressionValidator

RegularExpressionValidator控件可以,将表单域中输入的值和一个正则表达式,相匹配。(例如:检验有效的电子邮件地址、电话号码或用户名、口令等)

特殊属性:ValidationExpression——用来指定执行检验时使用的正则表达式。

注意:正则表达式在JavaScript和.NET框架中表现略有不同。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("ThankYou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>RegularExpressionValidator.aspx</title>

</head>

<body>

<form id="form1" runat="server">

<div>

产品代码:<br />

<asp:TextBox ID="txtProductCode" runat="server"></asp:TextBox>

<asp:RegularExpressionValidator ControlToValidate="txtProductCode" ValidationExpression="P[0-9]{4}" ID="RegularExpressionValidator1" runat="server" ErrorMessage="RegularExpressionValidator"></asp:RegularExpressionValidator>

<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" /></div>

</form>

</body>

</html>

同一个控件可以与多个检验控件相关联。

(一)    检验电子邮件地址

在执行表单检验时,最常见和最困难的检验任务之一是:检验电子邮件地址。

(二)    检验用户名和口令

通常的用户名和口令,只包含字母、数字或下划线。

可以使用的正则表达式如下:"w+

这个正则表达式匹配任何(包含一个或多个单词字符【字母、数字、下划线】的表达式)

若要限定口令的最小和最大长度,表达式如下:"w{8,20}

若口令中至少使用一个数组或一个字母,看如下表达式:

[a-zA-Z]+"w*"d+"w*

这个表达式要求,至少输入一个字母,后跟任意单词字符,然后至少一个数字,然后跟任意单词字符

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("ThankYou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>无标题页</title>

</head>

<body>

<form id="form1" runat="server">

<div>

密码:<br />

<asp:TextBox ID="txtPassword" Columns="30" runat="server" />

<asp:RequiredFieldValidator ID="rfv1" ControlToValidate="txtPassword" Display="Dynamic" Text="必须输入密码" runat="server" />

<asp:RegularExpressionValidator ID="revPassword" ControlToValidate="txtPassword" Display="Dynamic" Text="输入密码需要3到20个字符" ValidationExpression=""w{3,20}" runat="server" />

<asp:RegularExpressionValidator ID="revPassword2" ControlToValidate="txtPassword" Display="Dynamic" Text="密码必须是含有至少一个字母或数字" ValidationExpression="[a-zA-Z]+"w*"d+"w*" runat="server" />

<p />

<asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClick="btnSubmit_Click" />

</div>

</form>

</body>

</html>

(三)    检验电话号码

(四)    检验网址

http://"S+"."S+【此处要注意s字母的大小写】

它匹配,必须以http://开头,后跟任意个非空格字符,然后一个点,最后是任意个非空格字符。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("thankyou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>无标题页</title>

</head>

<body>

<form id="form1" runat="server">

<div>

输入网址:<br />

<asp:TextBox ID="txtUrl" columns="50" runat="server" />

<asp:RegularExpressionValidator ID="revUrl" ControlToValidate="txtUrl" Display="dynamic" Text="无效网址!" validationExpression="http://"S+"."S+" runat="server" />

<p />

<asp:Button ID="btn1" Text="提交" runat="server" OnClick="btn1_Click" />

</div>

</form>

</body>

</html>

这里要注意大小写敏感问题。http://www.163.com可以匹配,但是HTTP://www.163.com不能匹配。

而且,RegularExpressionValidator控件【没有可以用来启用正则表达式选项的属性】。

四、   比较值控件CompareValidator(比较内容可以是固定值或控件的输入值)

l 属性

属性

说明

ControlToCompare

ControlToValidate

Display

EnableClientScript

客户端表单检验,默认True

Enabled

ErrorMessage

IsValid

Operator

比较时使用的比较操作符,可能值为

Equal

NotEqual

GreaterThan

GreaterThanEqual

LessThan

LessThenEqual

DataTypeCheck

Text

Type

比较【值】时,使用的数据类型。Currency、Date、Double、Integer、String

ValueToCompare

值比较时,使用的值。

(一)    比较两个控件的值

假设,要比较两个日期,需要设置CompareValidator控件的

ControlToValidator、ControlToCompare、Operator和Type属性。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("thankyou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>无标题页</title>

</head>

<body>

<form id="form1" runat="server">

<div>

第一个日期:<asp:TextBox ID="txt1" Columns="8" runat    ="server" Width="120px" />

<br />

第二个日期:<asp:TextBox ID="txt2" Columns="8" runat="server" Width="120px" />

<br />

<br />

<asp:CompareValidator ID="cv1" ControlToValidate="txt2" ControlToCompare="txt1" Display="Dynamic" Text="第二个日期必须大于第一个日期" Operator="GreaterThan" type="Date" runat="server" />

</div>

<div>

<p />

<asp:Button ID="btn1" Text="提交" runat="server" OnClick="btn1_Click" />

</div>

</form>

</body>

</html>

注意:CompareValidator控件【并不检查】它要比较的控件是否真的输入了值。(若控件是空的,表单会忽略检验检查)

(二)    比较控件值和固定值

将固定值设置到控件的ValueToCompare属性。

(三)    执行数据类型检查

通过将控件的Operator属性设置为DataTypeCheck值,可以执行数据类型检查。

(注意:应该同时在Type属性设置相应的数据类型)

注意:此种检查,对于格式非常挑剔.

五、   检查值范围的控件RangeValidator

最大值和最小值可以是:日期、数值、货币或字符串。

l 属性

属性

说明

ControlToValidator

Display

EnableClientScript

Enabled

ErrorMessage

IsValid

MaximumValue

MinimumValue

Text

Type

注意:如果需要检查,输入值是否位于【其他表单域中的值】所决定的范围,应该使用CompareValidator。(CompareValidator控件允许比较不同控件的值)

六、   错误汇总控件ValidatorSummary

使用这个控件,可以在【希望的任何地方】总结所有错误。

l 重要属性

属性

说明

DisplayMode

错误消息的格式。有效值BulletList、List和SingleParagraph

EnableClientScript

Enabled

HeaderText

顶部文本

ShowMessageBox

ShowSummary

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If IsValid Then

Response.Redirect("thankyou.aspx")

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>无标题页</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:ValidationSummary ID="vs1" HeaderText="页面存在一些问题!" runat="server" />

<p></p>

用户名:<br />

<asp:TextBox ID="txt1" runat="server" />

<asp:RequiredFieldValidator ID="reqVal1" ControlToValidate="txt1" errorMessage="必须输入用户名" runat="server" />

<br />

密码:

<asp:TextBox ID="txt2" runat="server" />

<asp:RequiredFieldValidator ID="reqVal2" ControlToValidate="txt2" ErrorMessage="必须输入密码" runat="server" />

<asp:RegularExpressionValidator ID="regVal1" ControlToValidate="txt2" ValidationExpression="[0-9]{2,6}" ErrorMessage="密码位数在2到6之间" runat="server" />

<p />

<asp:Button ID="btn1" Text="提交" runat="server" OnClick="btn1_Click" />

</div>

</form>

</body>

</html>

注意:ValidationSummary控件显示的是各个检验控件的ErrorMessage属性。

不要将ErrorMessage和Text两种属性混淆了。通常,Text属性在表单域旁边显示错误消息;ErrorMessage属性在ValidationSummary中显示。

默认时,ValidationSummary在有符号的列表中显示错误。要做出修改,需要设置其DisplayMode属性。

七、   自定义检验控件CustomValidator

l 重要属性

ClientValidationFunction

客户端检验函数的名称

ControlToValidate

Display

EnableClientScript

Enabled

ErrorMessage

IsValid

Text

l 事件

ServerValidate       用于执行服务器端检验的函数

使用CustomValidator控件,通过编写子例程,可以在服务器端执行,也可以在客户端检验。

若要在服务器端检验,需要编写OnServerValidate(s As object,e as ServerValidateEventArgs)事件。

其中的第二个参数类型为ServerValidatorEventArgs,它具有两个参数:

l IsValid——为True时,表示成功通过检查

l Value——要检验控件的值。

警告:可以用于检查【空表单域】的惟一控件是RequiredFieldValidator,因为当被检验控件没有数据时,自定义的检验子例程不会被调用。

八、   禁用检验

在包含检验控件的表单上实现Cancel按钮的功能比较困难。

问题在于,客户端检验脚步会阻止与Cancel按钮相关联的任何子例程的执行。

解决此问题,需要使用Button、LinkButton和ImageButton控件的特殊属性【CausesValidation】。(可以在按钮点击时启用或禁用检验,需要将其设置为False)

第三章 用检验控件执行表单的验证相关推荐

  1. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  2. autojs遍历当前页面所有控件_HTML5表单和表单控件的使用

    哈喽大家好,我是作者"未来",本期分享的内容是Web前端系列课程,本系列总共29个阶段,坚持学习3个月蜕变为Web前端高手哦! 志同道合的小伙伴跟我一起学习交流哦! 第一阶段 HT ...

  3. JS使用Lodop控件打印表单和二维码

    有关Lodop的查询可看文章:Lodop打印条码二维码设置多宽不一定是多宽 一.了解Lodop 1.1Lodop的定义 Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内 ...

  4. HTML基本语法之表单标签:表单的组成 ,表单域,表单控件元素(表单元素) ,input表单元素, label标签, 表单控件(表单元素), select表单元素, textarea表单元素

    文章目录 表单标签 表单的组成 表单域 常用属性: 表单控件元素(表单元素) input表单元素 label标签 表单控件(表单元素) select表单元素 textarea表单元素 表单元素几个总结 ...

  5. web元件库、axure元件库、元件库、web组件、控件、表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴

    web元件库.axure元件库.通用元件库.web组件.控件.表单.框架.数据表单.导航栏.边框.图标.列表.日期时间选择器.评分组件.穿梭框.输入框.步骤条.图表组件.数据可视化.后台模板.时间轴. ...

  6. 表单和表单控件以及表单域详解

    表单域:存放表单的区域.把表单控件里面的信息全部收集提交. 表单控件 input表单控件: 1.是个单标签 </input> 2.input可以通过type(类型)属性来变换形状 单选按钮 ...

  7. html中完整表单控件,HTML表单和表单控件

    表单标签(掌握) 表单目的是为了收集用户信息. 在网页中,我们也需要跟用户进行交互,收集用户资料,这时就需要表单. 在HTML中,一个完整的表单通常由表单控件(也叫表单元素),提示信息和表单域3个部分 ...

  8. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第三章:简单控件

    第 3 章 简单控件 本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图.容纳视图的常用布局.响应点击的按钮控件.显示图片的图像视图等.然后结合本章所学的知识,演示了一个实战项 ...

  9. html5表单域,html5表单控件和表单域

    一.表单控件 文章目录 一.表单控件 1.1 认识表单 1.2 input控件 1.2.1 文本框与密码框 1.2.2 单选框和复选框 1.2.3 默认选中表单属性 1.2.4 input按钮组 1. ...

最新文章

  1. 如何看待那些互相矛盾的论文?
  2. c语言哈希表电子辞典_关于redis涉及的知识点,C语言如何操作redis
  3. mysql flush 使用
  4. php把字符串变为数组_php将字符串转换为数组
  5. 【论文阅读整理】TagFi: Locating Ultra-Low Power WiFi Tags Using Unmodified WiFi Infrastructure
  6. 动手Lab|利用CSI和Kubernetes实现动态扩容
  7. 重磅:服务器基础知识全解终极版(145页PPT)
  8. Golang的context理解
  9. struts2上传图片到mysql数据库 实例_Struts2上传图片到Mysql数据库中,以及显示到页面...
  10. 浏览器怎么导入导出|删除书签,方法步骤来咯
  11. 磁盘提示:使用驱动器中的光盘之前需要将其格式化怎么办?
  12. android手机常用浏览器,安卓手机浏览器对比 六款手机浏览器横评
  13. 算法实践:波兰表达式
  14. 误删 Win10 应用商店应该如何恢复?
  15. 富怡CAD计算机在哪,富怡CAD的工具介绍之一
  16. oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动有什么区别?
  17. ANTV/G6 绘制网络拓扑图
  18. 大二的第一次社会毒打
  19. 信息学奥赛C++编程:求出e的值
  20. uni-app直播实例|仿抖音小视频|uniapp仿陌陌直播

热门文章

  1. Docker Compose安装
  2. linux r服务安装失败,R包:RCurl和curl包在Linux上安装失败
  3. 讲一讲什么是 MMAP
  4. 【Netty】什么是编码器和解码器?
  5. CGContextSaveGState与CGContextRestoreGState的作用
  6. xmindcore.java_求解Xmind问题
  7. 以 27K 成功入职字节跳动,这份《 软件测试面试笔记》让我受益终身...
  8. linux 解压 目录,linux 中目录、文件的解压缩
  9. oracle alert下的文件,Oracle 11g alert文件变化
  10. linux部署项目文档,Linux系统部署项目