前言: 在这篇博客中我们先详细的说了一下ASP.NET中三种控件的区别以及使用(HTML控件,ASP.NET封装的控件,使用runat=”server”的HTML控件),最后我们有学习了ASP.NET中自带的一些验证控件,使用这些控件使我们大量的减少了一些验证,在这篇博客中的例子我没有写出来,因为设计到控件有很多的代码没法写,所以我会在最后将我的项目上传空间的,希望大家能够共同学习。
- 三种控件的区别
(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) 必须要对用户输入的数据进行合法性校验,这些校验逻辑很多是重复的,比如:字段不能为空,必须为日期格式,数字不能大于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用户同时显示警告对话框。