第5章Web服务器验证控件2内容提要本章首先介绍什么是用户输入验证,用户输入验证的目的,客户端验证和服务器端验证,ASP.NET的用户输入验证流程。然后是如何使用ASP.NET3.5的各种服务器验证控件。3学习目标理解客户端和服务器端验证掌握ASP.NET3.5各验证控件的使用4第5章Web服务器验证控件5.1用户输入验证概述5.2ASP.NET3.5服务器验证控件55.1用户输入验证概述用户输入验证检查用户输入的值是否与给定的值、给定的范围或给定的格式匹配用户输入验证的目的减少错误处理的等待时间避免非法的用户输入导致的错误结果避免非法的用户输入导致服务器崩溃避免欺骗或恶意代码阻止Web窗体进行下一步处理,直到所有的用户输入都通过验证6客户端验证和服务器端验证客户端验证是指利用JavaScript脚本,在数据发送到服务器之前进行验证。服务器端验证是指将用户输入的信息全部发送到Web服务器进行验证。7客户端验证和服务器端验证的区别安全性较低允许禁用客户端验证可以避免欺骗代码和恶意代码可与服务器上存储的数据进行比较验证,如与数据库密码进行比较使用基于.NET的开发语言实现与客户端浏览器版本无关安全性较高必然执行,重复所有客户端验证不能避免欺骗代码或恶意代码不能访问服务器资源使用Javascript和DHTML实现依赖于客户端浏览器版本服务器端验证客户端验证即时信息反馈需要服务器往返以显示错误信息8客户端验证和服务器端验证ASP.NET支持客户端验证和服务器端验证客户端和服务器端同时验证只在服务器端验证ASP.NET的用户输入验证流程通过验证通过验证用户输入数据否否是是错误信息客户端服务器端Web应用程序处理9ASP.NET验证控件ASP.NET验证控件集成了常用的客户端验证和服务器端验证的功能。开发人员无需关心使用哪种方式进行验证,因为在ASP.NET3.5页面生成时,系统会自动检测浏览器是否支持JavaScript,如果支持,则将脚本发送到客户端,验证就在客户端完成,否则在服务器端完成验证。服务器端通过判断页面的属性IsValid值可确定页面上的控件是否都通过了验证。“true”表示所有的控件都通过了验证,而“false”表示页面上有控件未通过验证10第5章Web服务器验证控件5.1用户输入验证概述5.2ASP.NET3.5服务器验证控件115.2ASP.NET3.5服务器验证控件RequiredFieldValidatorCompareValidatorRangeValidatorRegularExpressionValidatorCustomValidatorValidationSummary12共同的实用属性表ControlToValidate指定要验证控件的ID。Display指定验证控件在页面上显示的方式。值“Static”表示验证控件始终占用页面空间;值“Dynamic”表示只有显示验证的错误信息时才占用页面空间;值“None”表示验证的错误信息都在ValidationSummary中显示。EnableClientScript设置是否启用客户端验证,默认值true。ErrorMessage设置在ValidationSummary控件中显示的错误信息,若属性Text值为空会代替它。SetFocusOnError当验证无效时,确定是否将焦点定位在被验证控件中。Text设置验证控件显示的信息。ValidationGroup设置验证控件的分组名。13属性说明EnableClientScript:为保证响应速度,一般设置验证控件的属性EnableClientScript值为true。这样,当在页面上改变属性ControlToValidate指定控件的值并将焦点移出时,就会产生客户端验证。此时验证用的JavaScript代码不是由开发人员开发,而是由系统产生。若将EnableClientScript值设为false,则只有当页面有往返时,才会实现验证工作,此时完全使用服务器端验证。14属性说明(续)CausesValidation:值false表示不执行验证过程,默认值是True。(常用于“取消”按钮)若要对一个控件设置多个规则,可通过多个验证控件共同作用,此时验证控件的属性ControlToValidate应为相同值。若要对同一个页面上不同的控件提供分组验证功能,可以通过将同一组控件的属性ValidationGroup设置为相同的组名来实现。155.2ASP.NET3.5服务器验证控件5.2.1RequiredFieldValidator5.2.2CompareValidator5.2.3RangeValidator5.2.4RegularExpressionValidator5.2.5CustomValidator5.2.6ValidationSummary165.2.1RequiredFieldValidator控件用于对一些必须输入的信息进行检验,如用户名、密码等。asp:RequiredFieldValidatorID=RequiredFieldValidator1runat=serverControlToValidate=TextBox1ErrorMessage=RequiredFieldValidator/asp:RequiredFieldValidator属性InitialValue:用于指定被验证控件的初始文本。17实例5-1禁止空数据且同时要改变初始值当改变用户名右边文本框中内容并将焦点移出时执行客户端验证,若内容仍为文本框原来的初始值,则显示“不能与初始值相同”;若内容为空,则显示红色*。源程序:Rquire.aspx程序说明:rfvNamel保证用户名必须输入,而rfvNaqme2保证输入的用户名必须与初始值不同。185.2ASP.NET3.5服务器验证控件5.2.1RequiredFieldValidator5.2.2CompareValidator5.2.3RangeValidator5.2.4RegularExpressionValidator5.2.5CustomValidator5.2.6ValidationSummary195.2.2CompareValidator控件用于比较一个控件的值和另一个控件的值,若相等则验证通过;也可用于比较一个控件的值和一个指定的值,若比较的结果为true则验证通过。asp:CompareValidatorID=CompareValidator1runat=serverControlToCompare=TextBox2“ControlToValidate=TextBox1ErrorMessage=CompareValidator/asp:CompareValidator20CompareValidator控件实用属性表ControlToCompare指定与被验证控件比较的控件ID。Operator设置比较值时使用的操作符。值包括:Equal、NotEqual、GreaterThan、GreaterThanEqual、LessThan、LessThanEqual和DataTypeCheck。Type设置比较值时使用的数据类型。ValueToCompare指定与被验证控件比较的值。注意:属性ControlToCompare和ValueToCompare应用时只能选择一个。21实例5-2CompareValidator控件应用密码文本框和确认密码文本框要求验证输入值是否一致;答案文本框验证值是否为“A”;金额文本框验证数据类型是否为Currency。源程序:Compare.aspx225.2ASP.NET3.5服务器验证控件5.2.1RequiredFieldValidator5.2.2CompareValidator5.2.3RangeValidator5.2.4RegularExpressionValidator5.2.5CustomValidator5.2.6ValidationSummary235.2.3RangeValidator控件用来验证输入值是否在指定范围内。asp:RangeValidatorID=RangeValidator1runat=serverControlToValidate=TextBox4ErrorMessage=RangeValidatorMaximumValue=30MinimumValue=10“Type=Integer/asp:RangeValidator24实例5-3RangeValidator控件应用成绩文本框要求值在0~100之间;日期文本框要求值在2000-1-1与2008-1-1之间。源程序:Range.aspx255.2ASP.NET3.5服务器验证控件5.2.1RequiredFieldValidator5.2.2CompareValidator5.2.3RangeValidator5.2.4RegularExpressionValidator5.2.5CustomValidator5.2.6ValidationSummary265.2.4RegularExpressionValidator控件用来验证输入值是否和正则表达式的定义相匹配,常用来验证电话号码、邮政编码、E-mail等。asp:RegularExpressionValidatorID=RegularExpressionValidator1runat=serverErrorMessage=RegularExpressionValidator/asp:RegularExpressionValidator属性ValidationExpression:用来确定验证需要的正则表达式。27实例5-4验证电子邮件地址当输入的电子邮件地址不符合规则,再单击按钮后显示“请输入合法的E-mail地址!”,否则显示“验证成功!”。源程序:Regular.aspx注意:每个验证控件都有属性IsValid,若一个页面上有多个验证控件,只有当所有验证控件的属性IsValid值为true时,属性Page.IsValid值才为true。285.2ASP.NET3.5服务器验证控件5.2.1RequiredFieldValidator5.2.2CompareValidator5.2.3RangeValidator5.2.4RegularExpressionValidator5.2.5CustomValidator5.2.6ValidationSummary295.2.5CustomValidator控件当ASP.NET提供的验证控件无法满足实际需要时,可以考虑自行定义验证函数,再通过CustomValidator控件来调用它。asp:CustomValidatorID=CustomValidator1runat=serverControlToValidate=TextBox5ErrorMessage=CustomValidator/asp:CustomValidator305.2.5CustomValidator控件(续)要使用客户端验证,则需要设置属性ClientValidationFunction值为客户端验证函数名,并且要设置属性EnableClientScript的值为true。要使用服务器端的验证,则需要通过事件ServerValidate触发。不管使用何种验证方式,都可通过判断CustomValidator的属性IsValid来确定是否通过验证。31实例5-5验证必须输入一个偶数输入一个数值,单击按钮后判断奇偶数并返回验证结果。客户端验证源程序:CustomClient.aspx服务器端验证源程序:CustomServer.aspx混合