如果客户端验证打开,则在所有输入域均包含有效数据之前,该页不会回发。为了运行安全代码,以及防止恶意和秘密的攻击,您还是应该在服务器上验证数据;服务器端验证始终由验证器控件执行,即使同时要执行客户端验证也是如此。另外,并非所有类型的验证都能在客户端上完成。实际上,如果您需要针对数据库进行验证,则没有别的选择,只能回发到服务器。而这也正是发生问题的地方。
常规回发涉及整个页面。上载整个视图状态,处理整个页面,生成、下载和呈现同样的大型响应。如果您能够向服务器发出经过优化的带外请求,并只检查验证之下的控件的状态,那岂不是很好?
在 ASP.NET 中,没有这样的控件。那么我们就来编写一个这样的控件吧,我将其命名为 CallbackValidator。CallbackValidator 是一个自定义 ASP.NET 2.0 控件,我构建这个控件的目的是为了演示控件可以如何实现对承载页的带外调用,以及如何在服务器上自行处理事件。
在我开始着手此项目时,实际上并没有如此雄心勃勃的目标:我原先的目标只是修改 CustomValidator 标准控件。对于该记录,CustomValidator 控件采用了以编程方式定义的验证逻辑来检查用户输入的有效性。如果预先不知道要检查的值,则应该使用此方法。CallbackValidator 控件的最初意图是提供一种方法,以便在不回发整个页面的情况下执行服务器端验证。我意识到无需太多的额外努力,就可以拥有一个类似于自定义按钮的控件,这个控件可以在不回发整个页面的情况下在服务器上对许多输入域进行验证,而此时我的修改工作已经完成了一半。这个行为就是 CallbackValidator 控件的全部。
在我深入讲述该控件的精髓之前,我们先来看一下图 1。该页面上的 Submit 按钮只会按照普通的方式将所有值发布到服务器上。实际上,这些值将在客户端上进行处理,如果所有这些值都需要传递,那么该控件就会将其传递到服务器上,在该服务器上,所有控件输入都将使用服务器端验证代码(如果有的话)进行验证。Validate 按钮会触发一个对 Web 服务器的带外调用,并只验证指定的输入控件。在它返回时,您就会知道哪些值已经通过了服务器的验证。例如,在图 1 中,您将在尝试提交其余数据之前了解到是否已经采用了该用户 ID。
文章来源于领测软件测试网 https://www.ltesting.net/