第4章 使用验证控件
内容 验证控件概述 验证的对象模型 ASP.NET的验证模型 使用验证控件
验证控件概述 为什么要验证用户输入 验证过程
为什么要验证用户输入 输入验证是检验Web窗体中用户的输入是否和期望的数据值、范围或格式相匹配的过程,可以减少等待错误信息的时间降低发生错误的可能性,从而改善用户访问Web站点的体验 验证控件的值 错误阻塞处理 对欺骗和恶意代码的处理
验证过程
验证的对象模型 客户端和服务器端验证对象模型 客户端页变量 服务器端页属性 Page_IsValid IsValid Page_Validators(数组), 包含对页上所有验证控件的 引用 Validators(集合),包含对 所有验证控件的引用 Page_ValidationActive, 表示 是否应进行验证的布尔值。 通过编程方式将此变量设置 为 false 以关闭客户端验证 (无等效项)
ASP.NET的验证类型 验证类型 使用的控件 说 明 必需项 RequiredField Validator 要求用户必须输入某一项 说 明 必需项 RequiredField Validator 要求用户必须输入某一项 与某值的比较 CompareValida tor 将用户输入与一个常数值、另一个控件或特 定数据类型的值进行比较(使用小于、等于 或大于等比较运算符) 范围检查 RangeValidator 检查用户的输入是否在指定的上下限内。可 以检查数字对、字母对和日期对限定的范围 模式匹配 RegularExpress ionValidator 检查项与正则表达式定义的模式是否匹配。 此类验证使您能够检查可预知的字符序列, 如电子邮件地址、电话号码、邮政编码等内 容中的字符序列 用户定义 CustomValidat or 使用你自己编写的验证逻辑检查用户输入。 此类验证能够检查在运行时派生的值
使用验证控件 验证控件的对象模型 错误信息的布局和显示 使用验证控件 演示和练习:使用验证控件 演示和练习:使用自定义验证控件 使用验证组 演示和练习:如何使用验证组进行验证 禁用验证 演示和练习:通过设置CausesValidation属性来禁用验证 以编程的方式测试验证的有效性
验证控件的对象模型 属性 说 明 Display 获取或设置验证控件中错误信息的显示行为 ErrorMessage 说 明 Display 获取或设置验证控件中错误信息的显示行为 ErrorMessage 获取或设置验证失败时 ValidationSummary 控件中显示 的错误信息的文本 Text 获取或设置验证失败时验证控件中显示的文本 ControlToValidate 获取或设置要验证的输入控件 EnableClientScript 获取或设置一个值,该值指示是否启用客户端验证 SetFocusOnError 获取或设置一个值,该值指示在验证失败时是否将焦点 设置到 ControlToValidate 属性指定的控件上 ValidationGroup 获取或设置此验证控件所属的验证组的名称 IsValid 获取或设置一个值,该值指示关联的输入控件是否通过 验证
错误信息的布局和显示 布局选项 说 明 Static 即使没有可见错误信息文本,每个验证控件也将占用空 说 明 Static 即使没有可见错误信息文本,每个验证控件也将占用空 间,这允许你为页定义固定的布局。多个验证控件无法 在页上占用相同空间,因此你必须在页上为每个控件预 留单独的位置。这一设置只在 Internet Explorer 4.0 或更 高版本中有效,在其他浏览器中该布局将变成 Dynamic Dynamic 除非显示错误信息,否则验证控件将不会占用空间,这 允许控件共用同一个位置(例如表的单元格)。但在显 示错误信息时,页的布局将会更改,有时将导致控件更 改位置 None 验证控件不在页上出现
错误信息的布局和显示 显示方法 说 明 内联 在控件旁边验证控件所在的位置显示错误信息 摘要 说 明 内联 在控件旁边验证控件所在的位置显示错误信息 摘要 在一个涵盖所有错误的单独摘要中显示错误信息,该方式只 在用户提交页时可用。或者,可以在消息框中显示错误信息 ,但是此选项仅在支持动态 HTML (DHTML) 的浏览器中可用。 内联和摘要 同一错误信息的摘要显示和内联显示可能会有所不同。可以 使用此选项内联显示较为简短的错误信息,而在摘要中显示 较为详细的信息,也可以在输入字段旁显示错误标志符号, 而在摘要中显示错误信息。 自定义 可以创建自己需要的错误信息显示
使用验证控件 RequiredFieldValidator控件 在页中添加 RequiredFieldValidator 控件并将其链接到必需的控件,可以指定用户在ASP.NET 网页上的特定控件中必须输入信息
使用验证控件 CompareValidator控件 使用某一可指定的比较运算符来比较某控件中的特定字段与另一控件中的特定字段,并以此来确定有效性
使用验证控件 RangeValidator控件 指定MaximumValue和MinimumValue两个属性,验证另一控件值是否在允许的范围内
使用验证控件 RegularExpressionValidator控件 提供用于验证另一控件的值是否与所提供的正则表达式相匹配的控件功能 ZIP: <asp:TextBox id=txtZIP runat="SERVER"></asp:TextBox> <asp:RegularExpressionValidator id=txtZIP_validation runat="SERVER" ControlToValidate="txtZIP" ErrorMessage="Enter a valid US ZIP code." ValidationExpression="\d{5}(-\d{4})?"> </asp:RegularExpressionValidator>
使用验证控件 CustomValidator控件 自定义验证函数,来验证控件的输入值 //定义验证函数 protected void Text_ServerValidate (object source, ServerValidateEventArgs args) { args.IsValid = (args.Value.Length >= 8); } //使用验证函数 <asp:textbox id=TextBox1 runat="server"></asp:textbox> <asp:CustomValidator id="CustomValidator1" runat="server" OnServerValidate=" Text_ServerValidate " ControlToValidate="TextBox1" ErrorMessage="输入字符不能少于8个。"> </asp:CustomValidator>
演示和练习:使用验证控件 多媒体演示
演示和练习:使用自定义验证控件 多媒体演示
使用验证组 在页面上控件比较多时,可以将不同的控件归为一组,ASP.NET在对每个验证组进行验证时,与同页的其他组无关 通过将要分在同一组的所有控件的 ValidationGroup 属性设置为同一个名称(字符串)即可创建验证组
演示和练习:如何使用验证组进行验证 多媒体演示
禁用验证 设置 ASP.NET 服务器控件的属性(CausesValidation="false")来避开客户端和服务器的验证,而不只是客户端验证 禁用验证控件,即将控件的属性Enabled设置为false,使它根本不在页面上呈现并且不进行使用该控件的验证 如果要执行服务器上的验证,而不执行客户端的验证,则可以将单独验证控件设置为不生成客户端脚本,即将其属性EnableClientScript设为false
演示和练习:通过设置CausesValidation属性禁用验证 多媒体演示
以编程的方式测试验证的有效性 测试常规错误状态 在代码中测试页的 IsValid 属性,如果为true则执行代码;否则不执行 void Button1_Click(object sender, System.EventArgs e) { if (IsValid) // Perform database updates or other logic here. }
以编程的方式测试验证的有效性 测试单独控件的错误状态 利用Page公开的Validators属性来检查每个验证控件的 IsValid 属性 if (this.IsPostBack){ this.Validate(); if (!this.IsValid){ string msg = ""; foreach (IValidator aValidator in this.Validators){ if (!aValidator.IsValid){ msg += "<br>" + aValidator.ErrorMessage; } Label1.Text = msg;
回顾 验证控件概述 验证的对象模型 ASP.NET的验证模型 使用验证控件
参照实验手册,并在教师指导下完成实验报告。
详见本书第4章后习题部分,请学生独立完成。