异常处理和验证控件.ppt

上传人:牧羊曲112 文档编号:6572379 上传时间:2023-11-13 格式:PPT 页数:41 大小:342.15KB
返回 下载 相关 举报
异常处理和验证控件.ppt_第1页
第1页 / 共41页
异常处理和验证控件.ppt_第2页
第2页 / 共41页
异常处理和验证控件.ppt_第3页
第3页 / 共41页
异常处理和验证控件.ppt_第4页
第4页 / 共41页
异常处理和验证控件.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《异常处理和验证控件.ppt》由会员分享,可在线阅读,更多相关《异常处理和验证控件.ppt(41页珍藏版)》请在三一办公上搜索。

1、第5章 异常处理和验证控件,郑州信息科技职业学院 张中兴,本章内容,错误处理使用验证服务控件,5.1 错误处理,一.异常处理异常:发生不同类型的错误。抛出异常:系统或程序本身向外声明一个异常发生。异常类:错误的种类,都是特定类的对象。错误页面:一个特定的错误页面。处理异常:出现错误时不希望只是出现错误页面,而是能对错误直接处理。处理错误的方法(级别):1.在类级2.在页面级3.在应用程序级,二.在类级(程序中)使用trycatch语句块处理异常try double dVal1=Convert.ToDouble(txtValue1.Text);double dVal2=Convert.ToDou

2、ble(txtValue2.Text);double result=dVal1/dVal2;labMessage.Text=txtValue1.Text+/+txtValue2.Text;labMessage.Text+=+result;catch(FormatException ex1)labMessage.Text=Please enter a valid number;catch(Exception ex2)labMessage.Text=Unable to compute a value with these values;,有时需要使用finally做最后的处理,无论是否发生异常。t

3、ry/Open a database connection/Execute SQL statementcatch(DbException ex)/Handle database exceptionfinally/Close database connection if it exists,1.异常开销 不是多有的问题都需要使用异常来对待,如接受用户数据的输入。下面的处理方法并不是很合适:try SomeBusinessObject.Login(email);/Other code dependent upon a successful logincatch(Exception ex)/Disp

4、lay message that email was not found使用下面的处理方法程序将更加健壮:bool okay=SomeBusinessObject.Login(email);if(!okay)/Display error message on page else/Other code dependent upon a successful login,2.可能的异常处理策略当有异常出现时有四种处理策略:通过捕获异常来吞掉它,并且继续正常执行而忽略异常。在catch语句块中完全处理异常。不捕获异常而忽略它(让其他类来处理它)。捕获异常并重新抛出它,以便某个其它的类来处理它。说明:

5、第一种方法根本不合适。属于典型的不负责任。第二种方法最理想,但难以做到,不是什么问题自己都能够解决。第三种方法也比较多见,有时候自己无能力处理,只好交给别人处理。第四种方法也比较多见,根据情况进行处理,并将错误上报。,try/Other code that causes an exceptioncatch(Exception ex)/Do something with exception/Rethrow exception throw;或throw new Exception(myMessage,ex);,三.页面级的异常处理ASP.NET提供了一个Page_Error事件,专门处理页面级异常

6、。看下面的事例。public partial class PageExceptionTest:protected void Page_Load(object sender,EventArgs e)BuggyMethod();private void BuggyMethod()/Deliberately throw an exception to simulate/uncaught exception throw new ApplicationException(Your buggy code caused an exception.);private void Page_Error(objec

7、t sender,EventArgs e)Exception ex=Server.GetLastError();Response.Write(An error has occurred);Response.Write(+ex.Message+);Response.Write(+ex.StackTrace+);Context.ClearError();/防止缺省错误页面显示 Page_Error中不允许使用控件,所以只能使用Response.Write输出数据。,通常不使用Page_Error事件处理器,一般使用Application_Error处理器,它属于应用程序一级,比页面级更有优势。,四

8、、应用程序级的异常处理,有两种方法:使用Application_Error处理器使用错误页面重定向1.使用Application_Error处理器Application_Error处理器比Page_Error更有优势,它能处理所有页面级的错误。需要说明的是,Application_Error处理器定义在Global.asax文件中(可通过添加全局应用程序类添加)。,下面例子把接收到的任何异常输出到Windows Event Log,可通过事件查看器浏览。void Application_Error(object sender,EventArgs e)string msg=Url+Request

9、.Path+Error:+Server.GetLastError().ToString();try/create the WebErrors event source if we need to string logName=WebErrors;if(!EventLog.SourceExists(logName)EventLog.CreateEventSource(logName,logName);/add a new error event to the log EventLog log=new EventLog();log.Source=logName;log.WriteEntry(msg

10、,EventLogEntryType.Error);catch(Exception ex)/not much we can do with this except output it to debugger Debug.WriteLine(ex.Message);,也可以把错误形成邮件发送到指定的邮件中或把信息记录到自定义文件中。见教材P180。,2.使用自定义错误页面,如果在Page_Error和Application_Error中不使用Context.ClearError方法,则错误会重定向到缺省的错误页面。错误的页面在开发环境和非开发环境下是不同的,开发环境下可以看到错误的详细信息。也可

11、以将错误页面重定向到一个自定义的页面,这需要修改配置文件。,5.2 使用验证服务器控件,验证控件用来测试用户的输入并设置输入是否通过测试的属性。验证控件需要引用页面上其他的输入控件。在用户输入时,ASP.NET页框架将用户输入传递到一个或多个适当的验证控件,由验证控件对输入的信息进行验证。ASP.NET提供了五种基本的验证类型控件和一个验证总结控件(ValidationSummary),它们分别由不同的验证控件来实现。,验证控件,下面展示了RequiredFieldValidator控件的使用其中两个重要属性ControlToValidate用来建立关联,Text显示错误提示。,一、表单验证过

12、程,表单数据的验证包括客户端验证和服务器端验证客户端验证:浏览器通过本地JavaScript脚本进行验证,不需要与服务器交互,减少往返时间。效率高。服务器端验证:有些验证必须在服务器端进行,因为需要与服务器上的数据进行比较。两种验证不是绝对分开的。有时因为客户端不支持,客户端验证可能行不通,另外也存在一定的风险(存在脚本漏洞)。所以服务器端验证会更加安全。,1.客户端验证过程客户端验证就是验证的程序是在客户端执行,即控件转换成相关的HTML元素和一些JavaScript程序,例如RequiredFieldValidator控件转换后会有许多JavaScript代码。见实例:Validation

13、Sample.aspx UsingRequired.aspx可通过在浏览器查看源代码,观察生成的JavaScript代码。,2.服务器端验证过程服务器端的验证需要在服务器端编写相关验证程序。有时除了控件本身的验证以外,还需要编写一定的程序进行数据的检查,例如和数据库内容的匹配比较,检查用户名是否已注册等。见第5章实例:DisableClientValidation.aspx注意:Page.IsValid是页面的属性,当为tue时,说明客户端控件合法,即验证控件验证通过。,3.常用验证属性,ControlToValidate:控件IDDisplay:错误消息的显示行为。可能的值是:None(不显

14、示验证消息),Static(占用固定的空间并显示错误消息),Dynamic(只有当有错误消息时分配空间并显示消息).缺省值是Static.EnableClientScript:指示客户端验证是否可用.缺省值是true.Enabled:验证控件是否可用ErrorMessage:验证失效,将要显示在ValidationSummary控件中的错误消息文本.ForeColor:验证实效,将要显示错误文本的颜色。缺省为Color.Red.IsValid:验证失效是否传递它的验证检查,一般通过程序检验时设置。SetFocusOnError:验证失败,焦点是否移动到相关控件。缺省为false.Text:验证

15、失败时显示的错误信息.ValidationGroup:指定验证控件所属的验证组的名字.,二、RequiredFieldValidator控件,RequiredFieldValidator控件用于在Web窗体页面上保证用户非空输入,即对必填数据项已输入数据而不会跳过。相关属性:ControlToValidate属性:设置相关联控件。Display属性:设置显示方式,默认为Static,可设置为Dynamic以保证多个相关联验证控件的显示信息都能动态地显示相关信息(即位置不固定)。ErrorMessages属性:显示的提示信息!InitialValue属性:初始值,如果输入控件的值与该值匹配,则验

16、证失败。见实例:UsingRequired.aspx,三、CompareValidator验证控件,比较两个控件的输入是否符合程序设定。同样该控件也必须设置一个需要验证的控件与之关联。如比较两次输入的口令是否一致。CompareValidator 相关属性ControlToValidate:需比较的控件之一。ControlToCompare:比较的控件之二(可省,使用属性ValueToCompare)Operator:定义要执行的比较类型。包括:Equal Not EqualGreaterThanGreaterThanEqualLessThanLessThanEqualDataTypeChec

17、k 检查数据类型是否与Type属性指定的类型一致。Type:分为String、Integer、Double、Date和Currency。ErrorMessage:设置当验证失败时出现的错误信息。ValueToCompare:指定控件将要比较的常量见实例:UsingCompare.aspx,四、RangeValidator验证控件,用于计算输入控件的值,以确定该值是否在指定的上限与下限之间。RangeValidator相关属性ControlToValidate 属性:指定要验证的输入控件。MinimumValue 和 MaximumValue 属性:分别指定有效范围的最小值和最大值。Type 属

18、性:用于指定要比较的值的数据类型。在执行任何比较之前,先将要比较的值转换为该数据类型。类型同前。见实例:UsingRange.aspx,五、RegularExpressionValidator验证控件,用于确定输入控件的值是否与某个正则表达式所定义的模式相匹配。该验证类型允许检查可预知的字符序列,如身份证号、电子邮件地址、电话号码、邮政编码等中的字符序列。RegularExpressionValidator相关属性:属性ValidationExpression指定用于验证输入控件的正则表达式。正则表达式是一种语言,它可以明确描述文本字符串中的模式。通过特定的表达式语法规则验证表达式的合法性。例

19、如:下面是正则表达式的一些示例 http(s)?:/(w-+.)+w-+(/w-./?%&=*)?用于验证InternetURL w+(-+.w+)*w+(-.w+)*.w+(-.w+)*用于验证EMAL a-zA-Z4,8 必须为英文字母,最少四个字符,最多八个字符 d6 6位的整型数据 ASP.NET关于正则表达式的说明见P195。在有些网站提供相关资源。见实例:UsingRegExp.aspx,使用正则表达式,1.使用RegEx类有时需要在程序中使用正则表达式,通过程序来对数据进行验证。这就需要使用到RegEx类。RegEx类包含在命名空间。见教材实例:ScrapeHeadings.as

20、px注意:实例对于中文页面将显示乱码,需要增加第二行的语句:WebClient client=new WebClient();client.Encoding=Encoding.UTF8;string content=client.DownloadString(txtUrl.Text);,2.正则表达式和安全SQL注入攻击是常见的一种服务器攻击手段。利用网站合法的SQL语句进行注入,以达到窃取数据的、控制服务器的目的。例如,认证网页中会有型如:select*from admin where username=XXX and password=YYY 的语句,若在正式运行此句之前,没有进行必要的字

21、符过滤,则很容易实施SQL注入。如在用户名文本框内输入:abc or 1=1 在密码框内输入:123 则SQL语句变成:select*from admin where username=abc or 1=1 and password=123 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。防止注入的有效方法是对用户输入的数据进行验证,确保数据是合法的。,看下面的示例 此处对输入的数据做了要求,即匹配任何小写字母大写字母、单引号、逗点、空格,最少1个,最多50个字符。,也可以在程序中作出检验string source=(string)CookiesomeVa

22、lue;RegEx reg=new RegEx(a-zA-Z.s1,50);if(!reg.IsMatch(source)/Some type of error handling would go here,六、CustomValidator控件,自定义验证逻辑,需要创建一个服务器端验证函数用于执行验证。如验证注册用户名在数据库中是否已经存在。用户可以双击CustomValidator控件,也可以双击该控件的ServerValidate事件来完成自定义验证的代码。看下面的示例:,下面这段代码是用户用于验证数据库里的学生学号是否存在的函数。protected void CustomValidat

23、or1_ServerValidate(object source,ServerValidateEventArgs args)SqlConnection conn=new SqlConnection(Data Source=LDB;Initial Catalog=Students;User ID=sa);conn.Open();int StuNO=args.Value;SqlCommand cmd=new SqlCommand(select count(*)from student where stuid=+StuNO,conn);int count=Convert.ToInt32(cmd.Ex

24、ecuteScalar();if(count 0)args.IsValid=false;else args.IsValid=true;,下面方法检查用户输入的是否是一个有效的未来日期protected void custDate_ServerValidate(object source,ServerValidateEventArgs args)string sEnteredDate=args.Value;DateTime dt;bool convertSuccessful=DateTime.TryParse(sEnteredDate,out dt);if(convertSuccessful/n

25、ot a valid dateargs对象包含两个属性,Value保存了将要验证控件的字符串,IsValid用来设置输入是否有效。,下面例子实现了对两个文本框的验证。Enter user name:Enter email:上面两个文本框只用了一个验证控件,下面是验证控件的事件处理程序:protected void OrFieldValidator_ServerValidate(object source,ServerValidateEventArgs args)if(=0,自定义客户端验证,可通过设置控件的ClientValidationFunction属性使验证在客户端进行。例如此处既有服务

26、器端验证,也增加了客户端验证。客户端验证不需要回传,效率更高。,使用客户端验证需要定义客户端验证函数,并保证函数的签名如下:function name(source,args)例如 function validateOrFields(source,args)var sUser=document.form1.value;var sEmail=document.form1.value;if(sUser=说明:虽然建立起了验证控件与validateOrFields函数之间的关联,但客户端并没有设定触发该函数的事件。因此,数据修改并不能直接触发该事件。,自动客户端更新,设定输入控件客户端触发检查事件的

27、方法是使用JavaScript的ValidatorHookupControlID函数,格式如下:ValidatorHookupControlID(控件ID,显示验证信息的控件)它的第一个参数设置输入控件,第二个参数是验证控件。上面函数的意思是输入控件中的内容发生变化时触发验证控件中的客户端函数。下面是具体JavaScript代码 ValidatorHookupControlID(,document.getElementById();ValidatorHookupControlID(,document.getElementById();,七、ValidationSummary控件,用于收集本页的

28、所有验证错误信息(其他验证控件的ErrorMessage属性的错误信息),并可以将它们组织后再显示出来。摘要以列表、项目符号列表或单个段落的形式显示。相关属性ShowSummary属性:在 Web 页上输出摘要。ShowMessageBox属性:在消息框中显示摘要。如果只想让验证摘要控件显示错误信息,而其他验证控件不显示错误信息,可以设置这些验证控件的text属性,用来标示错误提示,如*。实际错误信息通过验证摘要控件显示出来。示例:UsingValidationSummary.aspx,八、验证组,默认情况下,当一个回发产生,所有验证控件都进行有效性检查。当表单中包含多个不相关的输入控件以及拥有一点不相关的事件处理器的时候,页面就出现了问题。ASP.NET 2.0引入了验证组,将不相关的输入控件分为不同的组,这样当组内一个控件产生回发的时候,只有该组内的那些验证控件被验证。示例:GroupingValidators.aspx,本章结束,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号