前言

无论什么应用软件系统,它最本质的功能和用途就是处理数据。这样,数据的安全性就成为了系统设计里面非常重要的话题,提交一些不安全的数据(如SQL注入、数据类型或者数据范围不合适等)常常会导致系统计算结果不正确,瘫痪甚至崩溃!

因此,这就要求在设计系统数据录入与提交功能时必须对数据的合法性进行验证,以保证干净准确的数据流入系统。

有过web开发经验的人都知道,以前对于数据输入的合法性验证用得最多的就是JS的脚本验证。这种方法就是当用户通过网页表单域输入数据后,再通过JS脚本对其有效性进行检验,如果输入的有问题就会终止提交数据操作。这种验证方式不占用服务器资源,可以很好的保证其性能。但是一旦用户禁用了浏览器的JS脚本。或者对于一个精通此道的攻击者来说,这些手段就显得不堪一击了(我可以伪造一个页面只有表单域而没有JS验证脚本、通过高科技(firebug)轻松搞定)。

面对这样的状况,大部分开发者开始选用了服务器端验证的方式。虽然服务器端验证方法对于js脚本来说安全性更高,但会让你写很多验证的代码。不论代码量还是服务器的资源消耗上来说,过多的验证逻辑都不是很理想的,因此ASPNET中页面的数据录入控件里。当验证控件和输入控件进行绑定之后,验证控件将自动执行客户端和服务器的双重验证,而我们所做的就是在验证空间里设置好数据验证的规则,以及相关的提示信息。如果相应的页面输入的数据为空、类型不正确或者不遵循验证规则,那么验证控件将完全终止页面回发,并返回相应的验证提示

验证控件的类型

在ASP.NET中,一共提供了6种验证控件,例如范围检查、模式匹配等验证控件。

RequiredFieldValidator 非空验证
RangeValidataor 用户检查用户录入数据是否在指定的范围内,你可以使用它来检查数字、字母、日期的范围
CompareValidataor 可用于检查与其他控件的特定类型数据的比较(大于,小于,等于)
RegularExpressionValidataor 正则表达式验证
CustomValidataor 自定义验证
ValidationSummary 本身没有验证效果,但是经常和验证控件一起使用,用于显示来自网页上所有验证控件的错误信息

当然并非只能一个控件只能有一种验证,一个控件可以被多个验证控件来验证的。比如一个文本框既可以验证非空,同时还可以进行正则验证。

BaseValidator

BaseValidator是所有验证类的基类,该类为所有验证控件提供和核心实现,它的常用属性与方法

ControlToValidate 验证控件将计算的输入控件的编程ID,如果此为非法ID则引发异常
Display None:验证控件从不内联显示,如果希望在ValidationSummary控件中显示错误,则可以使用此项
Static:如果验证失败则显示错误信息,即使通过的验证则也会占用显示空间。
Dynamic: 如果验证失败则显示错误信息,通过验证则不会占用显示空间
EnableClientScript 指示是否启用客户端验证,通过将此属性设置为false可以禁用js验证。
Enable 指示是否启用控件 若为flase则禁用验证效果
ErrorMessage 验证错误时显示的文本 它允许录入html信息 也就是说我们可以写一个img标记
ForeColor 验证错误时显示的文本颜色
IsValid 被验证的控件是否通过验证
FocusOnError 当验证错误时,让出错的控件获取焦点
ValidationGroup 指定该验证控件的验证组
Validate() 执行验证操作并更新IsValid属性
Text 在页面中显示的错误信息若没有指定的显示ErrorMessage信息

验证流程

在ASP.NET中有许多能够回发到服务器的数据提交控件,如BulletedList,Button,CheckBox,CheckBoxList,HtmlButton,HtmlInputButton,HtmlInputImage,ImageButton,LinkButton,ListBox,RadioButtonlist和TextBox控件。这些按钮都有一个CausesValidation属性

CausesValidation=false

ASPNET会忽略验证控件,页面正常被回送,事件处理代码正常执行

CausesValidation=true

ASPNET会执行所有验证控件,通过验证时才会被回发数据请求。

忽略前

忽略后

值得注意的是,有些控件的的AutoPostBack属性设置为true时才可以回发到服务器。

这些控件都有一个ValidationGroup属性,设置此属性后,当控件触发服务器回发时,仅验证指定组中的验证控件。

分组后同组的回传控件会触发同组的事件

RequiredFieldValidator

   1:  <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="a"></asp:TextBox>
   2:  <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="账号不允许为空"  ForeColor="Red"></asp:RequiredFieldValidator>

RangeValidator

它可以用来验证用户输入的数据是否在指定的范围内

Type属性

String 指定字符串数据类型
Integer 指定为整数类型
Double 指定为双精度浮点类型
Date 指定为日期数据类型
Currency 指定货币类型

注意:范围控件不会验证非空错误,所以我们喜欢这两个控件搭配使用。防止用户跳过某个控件的输入。

<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="&lt;img src='a.jpg' width='20px'&gt;" MaximumValue="20" MinimumValue="1" Type="Integer"></asp:RangeValidator>

CompareValidator

比较控件需要至少1个录入数据的控件才可以正常验证数据。

我们会用到一个比较属性Operator

和一个常数比较

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="必须大于20" ValueToCompare="20" Type="Integer" ControlToValidate="TextBox1" Operator="Equal"></asp:CompareValidator>
<asp:Button ID="Button1" runat="server" Text="Button" />

和其他控件的比较

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="两个控件数据必须一致" ControlToValidate="TextBox2" ControlToCompare="TextBox1" Operator="Equal"></asp:CompareValidator>

正则验证控件 RegularExpressionValidator

只需要指定要验证的正则表达式即可 。最常用的验证

自定义验证控件 CustomValidator

一般情况下,我们用上述的验证控件足够我们处理常见的数据验证问题了,如果确实需要一些自定义的验证方式。就可以采用CustomValidator了。

自定义验证控件允许根据自己的需要来分别定义客户端和服务器端验证子程序。然后与验证控件关联起来即可。

客户端验证方法

<head runat="server">
    <title></title>
    <script type="text/javascript">
        function validation1(source, arg) {
            if (arg.Value % 2 == 0)
                arg.IsValid = true;
            else
                arg.IsValid = false;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="不能被2整除" ClientValidationFunction="validation1" ControlToValidate="TextBox1"></asp:CustomValidator>

验证效果

同样我们可以创建服务器端验证方法

 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
 {
            try
            {
                args.IsValid = int.Parse(args.Value) % 2 == 0;
            }
            catch (Exception)
            {
                args.IsValid = false;
                //throw;
            }
  }

我们只需要创建服务器端验证事件即可

Page.IsValid

注意如果想在PageLoad里判断是否通过了验证,则我们需要显示的调用Page.Validate()方法才可以通过Page.IsValid属性判断是否通过验证。

如果我们只想在类似click事件里知道是否通过的话,我们不需要显示调用Page.Validate()方法。

通过Aspnet页面生命周期可以知道,验证是在Load事件之后,用户自定义事件之前发生。

总结

我们讲解了关于ASPNET中的5种常用的验证控件。

下一篇我们来讲解自定义验证控件。

转载于:https://www.cnblogs.com/feelboy/archive/2012/08/24/2654934.html

风影ASP.NET基础教学 4 验证控件相关推荐

  1. 风影ASP.NET基础教学 5 验证控件(二) 扩展自己的验证控件

    前文回顾 我们之前提过了5种官方验证控件的方式. 下面我们来讲解编程方式验证和扩展自己的验证控件 以编程的方式验证asp.net控件 默认情况下,在页面回发到服务器时,页面初始化之后(即视图ViewS ...

  2. 风影ASP.NET基础教学 6用户控件

    在Web系统开发中,经常会有一些功能模块在很多的地方重复出现,例如新闻管理系统中的用户登陆/注册.推荐新闻.热点新闻和页面上的一些固定栏目等.为了提高代码的重用性,减少系统的开发与维护成本,一般会把这 ...

  3. 风影ASP.NET基础教学 7用户控件编程

    下面我们使用"网站友情链接"的主要功能就是管理网站的各种友情链接地址,使这些友情链接能够显示在网站各个需要的地方,一般显示在网站的底部.为了实现链接显示,首先需要在项目中创建一个H ...

  4. 【ASP.NET】基础补习之验证控件

    在做Web应用程序的时候,因为用户有可能输入各式各样的信息,经常需要大量的数据验证,如果交给服务器去验证的话,无疑会增加服务器的压力,而且也容易造成程序的异常.甚至导致网站出现一些安全问题.因此我们在 ...

  5. 风影ASP.NET基础教学 2 web服务器控件

    在asp.net中,web标准服务器控件是ASPNET的核心部件,也是Web Form编程模型的最基本元素.相对于Html服务器控件而言,它具有更多的内置功能和可编程性.它不仅包括简单的按钮和文本框这 ...

  6. Asp.Net就业课之三验证控件

    验证控件 作用:验证信息是否正确.有效.合理. 一.数据有效性验证方式 1.后台C#代码验证: ​ 信息页面回传,回传到服务器,用户体验不好,服务器压力大.有很多个客户端网页的时候,1000万级别,会 ...

  7. 风影ASP.NET基础教学 12 GridView详解

    如果你用过GridView控件后,我相信你会很快喜欢使用它.GridView控件是老版本DataGrid的新一代改良者.是基于DataGrid改良而来的,它不但具备了更强大的数据网格显示与统计等功能, ...

  8. 风影ASP.NET基础教学 11 FormView

    无论功能上还是使用方法上,FormView与DetailsView都非常的类似,FormView控件使你同样可以使用数据源的单个记录.它也用于更新和插入新纪录,并且通常在详细方案中使用,在这些方案中, ...

  9. 风影ASP.NET基础教学 10 DetilsView

    在许多情况下,常常需要深入一条记录进行研究,此时DetailsView控件就可以大显身手了.使用DetailsView控件可以逐一显示,分页.更新.插入或者删除其关联的数据源中的记录,但它不支持排序. ...

最新文章

  1. 《用于物联网的Arduino项目开发:实用案例解析》—— 3.4 小结
  2. 邮件客户端WebMail Pro v7.7.5发布,在线订购限时75折优惠!
  3. Java微信对账接口返回值解析
  4. 双链表的基本操作---插入,删除,交,并,相邻元素的交换,不相邻元素的交换...
  5. 2017年网易校招题 买苹果
  6. drupal 7在一个form新增或者修改一个字段
  7. Flask框架 - 初识
  8. 京东与滁州达成战略合作,共建全国首座智慧型家电产地仓
  9. 留言板删除功能mysql_用PHP写留言板代码时怎样才能实现删除和修改留言的啊?代码是怎样的?...
  10. 你知道如何计算CNN感受野吗?这里有一份详细指南
  11. Linux支持运行3dmax,Mesa的Panfrost Gallium3D驱动程序现在可以使用新的DRM驱动程序
  12. 【权值分块】bzoj1588 [HNOI2002]营业额统计
  13. Pycharm专业版注册教程
  14. 在线教学质量评价系统java web_基于JavaWeb的教师教学质量评价系统
  15. 转载:Xshell使用教程
  16. 交警对开车人的“真言”
  17. 用Python实现温度转换程序
  18. python判断火车票座位是否靠窗_Python查询火车票(一)
  19. 广东省湛江市谷歌卫星地图下载
  20. 【vue】Storage二次封装

热门文章

  1. Html5调用手机摄像头并实现人脸识别
  2. 使用Tand自动化您的机器学习工作流程
  3. 金明的预算budget题解
  4. gem5运行SPECCPU2017benchmark
  5. 135、易燃液体的火灾危险性
  6. 天是岸:优秀的网络营销推广人,身上一般都具备这7大特质
  7. Arcgis地图服务切片
  8. 小型土路肩摊铺机施工步骤与工作原理的特点
  9. 数据结构之图最短路径
  10. 记录C语言学习【单个按键之长按+短按】