.NET为我们提供了不少验证控件,一定程度上减少了程序员在开发上的工作量,但是有很多时候我们往往会需要自定义一些自己的验证流程,而无法通过.NET中所提供的验证控件来完成。通常验证的话,分为客户端和服务器端验证,这里我们所提到的验证都是指客户端验证。

最常见的做法便是自己写一段JavsScript脚本,根据验证是否通过返回true或者是false。然后通过controlID.Attribute[“事件“] = “JavaScript:FunctionName():”;来使服务器控件被触发的时候调用该JavaScript脚本函数。但是这样写,会有一个问题,那便是当这个页面上存在其它的.NET验证控件的时候,一旦通过自定义的脚本函数验证之后,将不会执行服务器验证控件的验证。

也就是说,当controlID.Attribute[“事件“] 的值若被置为true的时候,编译器便认为已经通过了所有的验证,包括.NET的验证控件,便不再进行验证,直接将空间中的代码送到服务器执行。但是这时其实尚未执行.NET的验证控件的验证。但只要我们把代码稍做改变,当执行完自定义的验证之后,依然可以继续执行.NET验证控件的验证。

Function Validate()
{
   if(....) //若通过验证
   { return true;}
   else
      {return false;}
}
随后我们在后代代码中加上
  controlID.Attribute[“事件“] = “JavaScript:if(!FunctionName()){return false;}:”;若没有通过我们的自定义验证,返回false,控件将不会被提交到服务器执行,否则,便继续执行页面上其他空间的验证。

有时候适当的进行一下逆向思维,往往会起到出其不意的效果。