• ASP.NET 高级编程基础第十三篇—验证控件


    前言: 在这篇博客中我们先详细的说了一下ASP.NET中三种控件的区别以及使用(HTML控件,ASP.NET封装的控件,使用runat=”server”的HTML控件),最后我们有学习了ASP.NET中自带的一些验证控件,使用这些控件使我们大量的减少了一些验证,在这篇博客中的例子我没有写出来,因为设计到控件有很多的代码没法写,所以我会在最后将我的项目上传空间的,希望大家能够共同学习。

    1. 三种控件的区别

    (1) HTML控件,ASP.NET把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性,无法再服务器端进行处理。

    (2) ASP.NET服务端控件,经过ASP.NET高度封装的控件,使用简单,运行在服务器端,可以再服务端使用C#代码进行操作,会渲染到客户端为HTML控件。

    (3) runat=”server”的HTML控件,在HTML控件的基础上面添加runat=”server”,也是运行在服务端的,也可以服务端使用C#进行操作,也会渲染到客户端,不像ASP.NET服务端控件那样高度封装,暴露的属性大部分是普通的HTML属性,和ASP.NET服务端控件相比的好处是:当需要在服务端要对控件进行操作的时候,如果控件没有被ASP.NET服务端控件封装的时候,用runat=”server”的HTML控件更方便,runat=”server”的HTML控件也会对虚拟路径,id->ClientID进行处理,所以在使用虚拟路径,UserControl中也可能会用到。

    <input type=”Text” id=”txt1”runat=”server” />

    (4) a->HtmlAnchor;form->HtmlForm;head->HtmlHead;input->HtmlInputButton,HtmlInputCheckBox,HtmlInputText等;meta->HtmlMeta;table->HtmlTable;tr->HtmlTableRow;td->HtmlTableCell;title->HtmlTitl。为单独封装的标签(比如:div)对应的类型为:HtmlGenericControl。使用Attributes属性操作未封装的属性。

    (5) 服务端HTML控件不像ASP.NET控件那样封装的高级,比如:ASP.NET控件的BgColor属性为Color类型,而HTML控件的BgColor属性则为字符串类型,需要开发人员设置合适的值。

    注:在ascx写入如下代码,拖放一个TextBox控件和Button控件,如果要操作当鼠标滑过Button控件的时候给TextBox赋值,直接在Button控件里面写onmouserover这样是会报错的,所以我们要单独写一个JavaScript方法。

    <script type="text/javascript">

        document.getElementById("<%=Button1.ClientID %>").onmouserover = function () {

            document.getElementById("<%=TextBox1.ClientID %>").value = "Kencery";

        }

    </script>

    1. 验证控件

    (1) 必须要对用户输入的数据进行合法性校验,这些校验逻辑很多是重复的,比如:字段不能为空,必须为日期格式,数字不能大于100等,而且要同时在客户端和服务端校验,客户端校验提高可用性,服务端校验防止恶意攻击,ASP.NET验证控件就是为了简化这些问题而提供的。

    (2) ASP.NET提供了如下的组件

     1) RequiredFieldValidator:字段必填。

     2) RangeValiclator:值在给定的最大值最小值之间。

     3) CompareValidator:用于比较两个值的关系是否满足要求或者是否是指定类型的数据。

     4) RegularExpressionValidator:校验数据满足正则表达式。

     5) CustomValidator:自定义验证。

    (3) RequiredFieldValidator

     1) ControlToValidate设定要验证的控件,Text属性为当被验证的控件为空的时候显示的错误信息,Text不仅可以写文本,还可以写任何HTML内容。

     2) 有时候控件如果是默认值也认为是空值,比如:下拉列表的选中值”---请选择性别---”,文本框的值为”填入搜索关键字”,只有将RequiredFieldValidator的InitialValue属性设定为”---请选择性别---”,”填入搜索关键字”即可。

    (4) Validator共性

     1) 页面中的IsValid属性用来判断页面中的所有Validator是否都校验通过,只有都校验通过才会为True,即使页面中的Validator服务端校验报错(禁用JavaScript跳过客户端校验),在服务端方法中的业务代码(比如:btnOK.Click)也会被执行,因此如果代码在数据校验不通过的不能执行,则需要判断IsValid的值。

    注:在Button控件下面写入如下代码:

     if(!IsValid){

        return;

    }

    if(this.IsValid){                               else{

        正确信息;                                     错误信息;

    }                                           }

     2) 所有验证控件都有Display属性,用来决定如何显示错误信息。三个值:static:没有错误信息的时候控件的Visiblity样式为Hidden来实现隐藏;Dynamic,没有错误信息的时候控件的display样式为none来实现隐藏,这两者的区别在于:Visiblity:hidden隐藏控件仍会占据空间,而display:none隐藏则不会占用控件,Display属性还可以设置为None(用来配合后面讲的ValidationSummary)。

     3) 几乎所有的验证控件都有ControlToValidate,Text属性,所有控件都几乎在客户端和服务端都要进行校验。

     4) 如果在一个页面中同时放置注册和登录表单,那么他们的验证就会同时进行,这样虽然只是登录,但是注册的验证也会触发,可以使用验证组来解决这个问题,将同一组的控件(表单,提交按钮)等的ValidationGroup设为相同的值就可以,这样的话和Button等触发事件的控件ValidationGroup相同的控件才会校验。

     5) 如果将按钮控件(Button,ImageButton,LinkButton)的CausesValidator属性设置为false,则这个按钮的点击不触发校验。

    (5) RangeValidator

     1) RangeValidator:MininmumValue,MaximumValue为最小,最大值,Type属性为数据类型(String,Interger,Double,Date,Currency等)。例如:年龄,毕业日期在合理范围内。

     2) RangeValidator,CompareValidator,RegularExpressValidator等都不会对非空值进行检验,所以如果字段不允许为空则需要在使用RequiredFieldValidator。

    (6) CompareValidator

    1) CompareValidator:Type属性同RangeValidator,Operator属性,比较操作符,可选值DataTypeCheck,Equal,GreaterThan,GreaterThanEqual,LessThan,LessThanEqual,NotEqual,ValueToCompare所比较的运算符右边的值,ControlToCompare设定和另一个控件进行比较。

     2) 校验数据类型,不进行范围的比较,ControlToValidate设定要校验的控件,Type设定要校验的数据类型,Operator设定为DataTypeCheck。

     3) 要进行范围的比较,ControlToValidator设定要校验的控件,Type设置要校验的数据类型,Operator设定为GreaterThan,ValueToCompare为要比较的值,也可以编程的时候动态设置。

     4) 与另一个空间的值进行比较,ControlToValidate设定要校验的控件,Type设置要检验的数据类型,Operator设定为GreaterThan,ControlToCompare设置为要比较的验证控件(运算符右边的控件)。

    (7) 高级Validator

    1) RegularExpressionValidator,ValidationExpression属性为正则表达式,VS的可视化编辑提供了几个内置的正则表达式,也可以自己写,案例:检验Email地址,身份证号码,QQ号码(5位至10位的数字),个人说明必须在10到50字之间。

     2) CustomValidator,自定义验证控件,当ASP.NET内置的验证控件无法满足要求的时候可以使用CustomValidator。

     3) ServerValidate事件为服务端的校验代码,在事件处理函数中读取args.Value来获得待校验的值,如果值合法则将args.IsValid设置为True,否则设置为False,如果为ClientValidationFunction设定一个函数名,那么会首先在客户端调用指定的JavaScript函数进行客户端校验,否则将只做服务器端校验,客户端校验函数的签名是:”函数名(src,args)”,argsd的属性以及意义和服务端的一样。

    (8) 汇总错误消息

    1) 使用Validator错误消息会显示在放置的位置,这样有两个可能的问题,如果表单非常大,用户看不到全部的错误信息,希望把消息集中显示在提交按钮旁边,如果错误信息非常多,错误信息会散落各地,希望能集中显示。

     2) ValidationSummary控件用来集中显示错误信息,每个验证控件都有ErrorMessage,Text两个属性,ErrorMessage是用来显示到ValidationSummary中的值,Text是用来显示在Validator位置的值,如果Text为空,则ErrorMessage会同时显示到ValidationSummary和控件的位置,一般Text的值要简短(比如:”必填”,”*”),因为直接显示到空间的位置,能知道指的是哪个控件,ErrorMessage要详细一点(比如:”用户名不能为空”,不能是”不能为空”等),这样才能从ValidationSummary每条错误信息中读取值出来。

     3) ValidationSummary的属性:DisPlayMode:显示模式,ShowMessageBox用户同时显示警告对话框。

  • 相关阅读:
    WebDAV
    招牌老鸭汤(图)-张生记(双菱店)-杭州-大众点评网
    How to install and use Headless Chrome on OSX | Object Partners
    k8s的yaml说明
    config-server-bus动态更新配置
    springboot~maven集成开发里的docker构建
    vue~环境搭建
    logback日志文件位置动态指定
    HDU 4649 Professor Tian(反状态压缩dp,概率)
    android 内部存储 安装apk
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2653693.html
Copyright © 2020-2023  润新知