幸运的是,ASP.NET提供了一些体贴的自动验证控件,可用它确保应用程序收到它所希望的输入。最妙的是,这些控件的工作方式就像在文档中叙述的那样:只需把它们放到一个Web窗体,设好几个属性,然后就可以了。
本文首先用一个简单的例子展示ASP.NET的数据验证控件是如何工作的。防止用户将一个特定的输入字段留空不填是极其常见的一个任务。假定这个字段要求输入的是用户名。为此,我们在窗体上添加一个TextBox控件,名为txtName。使用RequiredFieldValidator控件,能检查相应的表单字段是否确实有一个值。一旦CausesValidation控件被设为true的任何控件(通常是一个按钮)触发了一个预定义的事件(对按钮来说就是单击),或者你的代码主动调用,就会触发验证。
要为特定的控件指派一个验证控件,可使用验证控件的ControlToValidate属性。另外,使用ErrorMessage属性,可为控件指定一条错误消息,以便在验证失败时显示。由于默认的错误消息就是控件名称,所以最好设置一条更具帮助价值的消息,例如“请输入你的用户名”。
最后,假定我们的窗体上还有一个Submit按钮,它的CausesValidation属性设为true(这对按钮来说是默认值)。如果用户在单击Submit时没有输入用户名,就会出现如图A所示的结果。
图A
方便的窗体验证
观察为这个页生成的源代码,很容易就能看出它是如何工作的。如清单A所示,默认情况下,ASP.NET在窗体的HTML中包括了一个客户端脚本。一旦提交窗体,就会调用脚本,由浏览器代表你执行任何验证。这当然十分方便。你无需为自己的窗体编写验证代码,所有验证都在客户端执行。如果验证失败,用户立即就能知道,而且以前输入的任何数据依然存在。
也可将验证控件的行为从默认的客户端验证更改为服务器端验证,方法是将控件的EnableClientScript属性设为false。你在下述情况中应考虑这样做:已知客户端浏览器不支持必要的脚本功能,不希望产生随网页发送嵌入脚本的开销,或者验证需要特殊的外部依赖,所以不可能进行客户端验证(比如要执行一次数据库检索)。