使用ASP.NET Atlas开发实时验证用户名是否被注册的自定义Behavior

作者:Dflying Chen ( http://dflying.cnblogs.com/

昨天看到园内adonio朋友的使用CustomValidator类及时验证用户名,这是一个很常见的功能需求,且采用AJAX的方式可以带给用户更好的体验。adonio朋友使用的是未经包装的AJAX方法,其实我们完全可以基于现有的Atlas框架,开发出更易使用的组件。

这里我将上述功能封装为Atlas中的Behavior,以方便重用。关于Atlas的Behavior,请参考:在ASP.NET Atlas中创建自定义的Behavior

该检验用户名是否被注册的ValidateUserNameBehavior有如下几个属性:

  1. serviceName:获取或设定检查用户名的Web Service的路径名称。您必须指定这个属性。
  2. methodName:获取或设定检查用户名的Web Method名称。您必须指定这个属性。
  3. checkResultLabelID:获取或设定显示检查结果的DOM元素的ID。您必须指定这个属性。
  4. validMessage:获取或设置通过检查(用户名可用)时显示的文字。
  5. invalidMessage:获取或设置未通过检查(用户名不可用)时显示的文字。

同时,服务器端检查用户名的Web Method必须有如下的签名,其中传入一个待检查的用户名,返回检查后的布尔结果(可用/不可用):

None.gif public   bool  CheckUserName( string  userNameCandidate)

关于这个ValidateUserNameBehavior的实现,您可以下载源代码后结合在ASP.NET Atlas中创建自定义的Behavior中提到的五个步骤分析,其实是非常简单的。其中需要注意的是如下部分:

ExpandedBlockStart.gif ContractedBlock.gif function  blurHandler()  dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (this.control.element.value == '') dot.gif{
InBlock.gif        _checkResultLabel.innerHTML 
= '';
InBlock.gif        
return;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
InBlock.gif    Sys.Net.ServiceMethod.invoke(
InBlock.gif        _serviceName, 
InBlock.gif        _methodName, 
InBlock.gif        '',
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{ userNameCandidate : this.control.element.value},
InBlock.gif        _onMethodComplete
InBlock.gif    );
ExpandedBlockEnd.gif}

None.gif
None.gif
function  _onMethodComplete(result)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    _checkResultLabel.innerHTML 
= result ? _validMessage : _invalidMessage;
ExpandedBlockEnd.gif}

在该TextBox 失去输入焦点时候blurHandler() 将被调用,并且使用AJAX 方式发送检查用户名的请求到指定的Web Service 。在回调函数onMethodComplete() 中,根据返回值设置相应的显示结果。

作为开发者,使用这个ValidateUserNameBehavior非常简单,请看如下的实例:

首先创建一个Web Service以及检查用户名的方法,这里为了演示,实现的逻辑很简单,只有Dflying和Admin两个用户,您可以根据实际情况更改:

None.gif using  System;
None.gif
using  System.Web;
None.gif
using  System.Web.Services;
None.gif
using  System.Web.Services.Protocols;
None.gif
None.gif[WebService(Namespace 
=   " http://www.dflying.net/ " )]
None.gif[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
None.gif
public   class  UserRegisterService : System.Web.Services.WebService
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
private static string[] m_userData = dot.gif"Dflying""Admin" };
InBlock.gif
InBlock.gif    [WebMethod]
InBlock.gif    
public bool CheckUserName(string userNameCandidate)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
foreach (string s in m_userData)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if (s == userNameCandidate) 
InBlock.gif                
return false;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
return true;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

然后再用户注册的页面上添加ScriptManager,并且引用这个ValidateUserNameBehavior.js文件:

None.gif < atlas:ScriptManager  runat ="server"  ID ="ScriptManager1" >
None.gif    
< Scripts >
None.gif        
< atlas:ScriptReference  Path ="ValidateUserNameBehavior.js"   />
None.gif    
</ Scripts >
None.gif
</ atlas:ScriptManager >

然后是提供用户输入用户名的input,以及相应的显示检验结果的span:

None.gif < div >
None.gif    UserName:
None.gif    
< input  type ="text"  id ="userName"  class ="input"   />
None.gif    
< span  id ="userNameError"   ></ span >
None.gif
</ div >

最后是Atlas的XML Script,将上面的input提升为Atlas TextBox控件,在它的Behavior中添加我们的ValidateUserNameBehavior,并指定该Behavior的属性:

None.gif < script  type ="text/xml-script" >
None.gif    
< page  xmlns:script ="http://schemas.microsoft.com/xml-script/2005" >
None.gif        
< components >
None.gif            
< textBox  id ="userName" >
None.gif                
< behaviors >
None.gif                    
< validateUserNameBehavior  checkResultLabelID ="userNameError"  serviceName ="UserRegisterService.asmx"
None.gif                        methodName
="CheckUserName"   />
None.gif                
</ behaviors >
None.gif            
</ textBox >
None.gif        
</ components >
None.gif    
</ page >
None.gif
</ script >

浏览器中测试一下,输入一个可用的用户名:
validateUserNameBehavior1.JPG

输入Dflying,哦已经被注册了:
validateUserNameBehavior2.JPG

该示例程序以及相应的ValidateUserNameBehavior的源代码可以在此下载:http://files.cnblogs.com/dflying/ValidateUserNameBehavior.zip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值