幸运的是,ASP.NET对表单检查进行了相当大的改进。对初学者来说,以事件为基础的、以UI控件为中心的WebForm编程模式大大简化了表单检查的任务。不过,ASP.NET在原有基础之上更进一步,通过一整套服务器控件直接支持表单检查,从而几乎完全消除了自己建立表单检查机制的必要。本文的主旨即是介绍和演示ASP.NET随带的检查服务器控件。
ASP.NET检验服务器控件(validation server control)同TextBox和Label等Web服务器控件一道位于System.Web.UI.WebControls名称空间之下。ASP.NET提供了6种检验控件,如图A所示:
图A
ASP.NET检验控件
ValidationSummary控件并不执行具体的表单值检验工作。它的功能是总结页面内其他检验控件发出的错误消息。在本文的其他部分,当我提到检验控件的时候,我指的是那些执行具体检验任何的控件,也就是除了ValidationSummary之外的其他控件。
检验控件直接或者间接派生自抽象的BaseValidater类,该类又是从Label控件派生的。你可能会觉得奇怪,检验控件怎么会从Label派生呢?很快我们就会知道原因何在了。
检验控件对页面上输入服务器控件的值进行检查,从而判断出这些值是否符合特定的条件。被检查的输入控件由检验控件的ControlToValidate属性设定。你可以对检验控件编程令其调用Validate方法对数据控件的输入值进行检查,如果检验结果符合条件则该方法会把检验控件的IsValid属性设置为true,否则设置为false。你可以设置页面上的检验控件调用Page.Validate方法对所有输入控件的输入值进行检查。
Page.IsValid属性在页面内所有检验控件的检查都成功的情况下设置为true否则设置为false。假如按下了某个按钮控件,而且该控件的CausesValidation属性设置为true,那么Page.Validate方法即被调用。Reset或者clear按钮的CausesValidation属性默认设置为
false。假如页面上任何检验空间的IsValid设置为false那么按钮单击事件即被屏蔽。
如果浏览器支持ECMAScript 1.2
(JScript) 和Document Object Model (DOM) (兼容Internet Explorer 4及以后版本),那么检验控件会执行客户端脚本在客户机上进行表单检查工作而不会通过服务器进行迂回检查。这样做可以给用户提供给及时的反馈。为了对浏览器提供强度更大的支持和防止用户旁路表单检查,当页面提交之后服务器端也会执行表单检查。客户端检查可以禁用,方法是把检验控件的EnableClientScript属性设置为false。你还可以禁用页面内所有检验控件的客户端表单检查,只需要在@Page指示符内设置属性ClientTarget=”downlevel”即可。
在检查不通过的情况下,检验控件的Text属性会在页面内检验控件所在的位置显示出来,其外观形式就如同一个标签。假如没有设置Text属性则显示ErrorMessage属性。一旦检验不通过,ErrorMessage属性也会显示在ValidationSummary控件内。假如检验控件没有设置ErrorMessage则ValidationSummary上什么都不会显示。一般原则是摘要消息或者错误提示可以采取设置Text属性的方式,而较长的说明则采取设置ErrorMessage属性的方式。
不同的检验控件测试的条件是不同的: