随笔-312  评论-12034  文章-2  trackbacks-256
Enlish Version: http://dflying.dflying.net/1/archive/112_build_your_own_validators_in_aspnet_atlas.html

ValidatorASP.NET Atlas中的一类强大的组件,用来检查InputControl类型的Atlas控件,例如Web.UI.TextBox,的输入数据。如果你熟悉ASP.NET的话,你一定知道ASP.NET中作为服务器控件运行的ValidatorAtlas中的Validator在客户端提供同样的功能。Atlas包含如下一些内建的Validator

  1. requiredFieldValidator检查是否有数据输入。
  2. typeValidator检查输入的数据是否为特定的类型。
  3. rangeValidator检查输入的值是否在一个范围之内。
  4. customValidator用自定义的验证函数验证输入。
  5. regexValidator用指定的正则表达式验证输入。

某个Atlas客户端控件的Validator可被定义成一个集合,当控件的propertyChanged事件被引发时,Atlas将调用Validator集合中的所有Validator去验证输入的数据。在验证的过程中一旦失败,这个ValidatorvalidationMessage将被设置。Validator可以以组的形式验证一组控件的输入,并统一显示错误信息。

您还可以指定一个validationErrorLabel控件关联于某个将被验证的输入控件,它可以显示验证过程中的错误并可以自定义错误提示。

OK,以上内容大部分来自Atlas的文档,这里不再赘述。让我们通过一个IPAddressValidator的实例来学习如何编写自定义的Validator。顾名思义,IPAddressValidator将用于验证某个输入是否为一个合法的IPv4地址。

通常的,编写自定义Validator有如下两个步骤:

  1. Sys.UI.Validator基类中继承。
  2. 实现validate()方法来验证输入,并返回一个布尔值代表是否验证成功。

下面是IPAddressValidator的实现,并将其保存为IPAddressValidator.js

Sys.UI.IPAddressValidator = function() {
    Sys.UI.IPAddressValidator.initializeBase(
this);

    
this.validate = function(value) {
        
if (!value) {
            
return false;
        }

        
if (String.isInstanceOfType(value)) {
            
if (value.length == 0{
                
return false;
            }

        }

        
var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
        
var ipArray = value.match(ipPattern);

        
if (ipArray == null)
            
return false;

        
for (i = 0; i < 4; i++{
            
var thisSegment = ipArray[i];
            
if (thisSegment > 255{
                
return false;
            }

        }

        
return true;
    }

}

Sys.UI.IPAddressValidator.registerSealedClass('Sys.UI.IPAddressValidator', Sys.UI.Validator);
Sys.TypeDescriptor.addType('script', 'ipAddressValidator', Sys.UI.IPAddressValidator);

 

让我们在页面中测试上面的IPAddressValidator控件。这里将添加一个text box用于待验证IP地址的输入,一个label用于显示错误信息。

这里是ASPX中的HTML声明,不要忘记在ScriptManager中添加对上面IPAddressValidator.js文件的引用。

<atlas:ScriptManager runat="server" ID="ScriptManager1">
    
<Scripts>
        
<atlas:ScriptReference Path="IPAddressValidator.js" />
    
</Scripts>
</atlas:ScriptManager> 
  
<div class="description">
    Please input an IP Address: 
    
<input type="text" id="ipBox" class="input" />
    
<span id="ipValidator" style="color: red">This IP Address is invalid!</span>
</div>

 

 

下面是Atlas脚本定义:
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
    
<components>
        
<textBox id="ipBox">
            
<validators>
                
<ipAddressValidator errorMessage="This IP Address is invalid!" />
            
</validators>
        
</textBox>
        
<validationErrorLabel id="ipValidator" associatedControl="ipBox" />
    
</components>
</page>

 

在浏览器中运行结果:


 

posted on 2006-04-07 20:55 Dflying Chen 阅读(2097) 评论(18)  编辑 收藏 网摘 所属分类: ASP.NET AJAX (Atlas)

评论:
#1楼 2006-04-07 21:02 | 阿不      
更新的好快啊!
  回复  引用  查看    
#2楼[楼主] 2006-04-07 21:04 | Dflying Chen      
@阿不
呵呵,这些东西比较Basic,很好写的:)

  回复  引用  查看    
#3楼 2006-04-07 22:01 | xilihwala      
支持啊
  回复  引用  查看    
#4楼 2006-04-08 06:51 | 一滴水      
Atlas 中文资料太少了,谢谢你提供的例子!
  回复  引用  查看    
#5楼[楼主] 2006-04-08 07:48 | Dflying Chen      
@xilihwala
@一滴水
慢慢来,争取一天写一篇:)希望能有所帮助。

  回复  引用  查看    
#6楼 2006-06-05 09:10 | 阿非      
支持
  回复  引用  查看    
#7楼 2006-06-08 14:53 | Sunny      
是不是把IPAddressValidator.js文件放到我的atlas安装目录下面?它下面有两个,Release,Debug,我两个下面都放了。怎么运行后不对啊?

他说UnRecongnise tag IPAddressValidator

  回复  引用  查看    
#8楼 2006-06-08 14:57 | Sunny      
Sys.UI.IPAddressValidator.registerSealedClass('Sys.UI.IPAddressValidator', Sys.UI.Validator);


是不是你这句代码有问题呢?

  回复  引用  查看    
#9楼 2006-08-17 15:59 | Androclus      
在IPAddressValidator.js中
if (!value) {
return false;
}

这段如何理解?相关文档中常见到,但理解的模模糊糊。

  回复  引用  查看    
#10楼[楼主] 2006-08-26 13:27 | Dflying Chen      
@阿非
谢谢

  回复  引用  查看    
#11楼[楼主] 2006-08-26 13:34 | Dflying Chen      
@Sunny
应该使用ScriptManager将您自定义的JS引入到页面中。

  回复  引用  查看    
#12楼[楼主] 2006-08-26 13:37 | Dflying Chen      
@Androclus
JavaScript是弱类型的,这句话的意思是,若value为null或undefined或空字符串或0等一切可以被转化为布尔值false的值,均将返回false,代表验证失败。

  回复  引用  查看    
#13楼 2006-10-06 00:28 | 匿名用户[未注册用户]
asp.net已经有一套功能比较强大的验证控件了,为什么atals还要自己弄一个呢?不明白
  回复  引用    
#14楼 2006-10-06 00:28 | 匿名用户[未注册用户]
atals>atlas
  回复  引用    
#15楼[楼主] 2006-10-06 08:25 | Dflying Chen      
@匿名用户
服务器端和客户端的区别阿

  回复  引用  查看    
#16楼 2006-10-06 10:59 | 匿名用户[未注册用户]
@Dflying Chen
谢谢您的解答,我刚刚接触atlas,对于你说的服务器端,我还是不太明白。
var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
var ipArray = value.match(ipPattern);

if (ipArray == null)
return false;

for (i = 0; i < 4; i++) {
var thisSegment = ipArray[i];
if (thisSegment > 255) {
return false;
}
这里不也是用到了js吗?点击按钮的时候会连接服务器吗?我也会试一下,谢谢

  回复  引用    
#17楼[楼主] 2006-10-06 17:58 | Dflying Chen      
@匿名用户
这些是纯粹在客户端的

  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 369616




相关文章:

相关链接: