随笔-312  评论-12034  文章-2  trackbacks-256
作者:Dflying Chen http://dflying.cnblogs.com/

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

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

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

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

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

public bool CheckUserName(string userNameCandidate)

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

function blurHandler() {
    
if (this.control.element.value == '') {
        _checkResultLabel.innerHTML 
= '';
        
return;
    }

    
    Sys.Net.ServiceMethod.invoke(
        _serviceName, 
        _methodName, 
        '',
        
{ userNameCandidate : this.control.element.value},
        _onMethodComplete
    );
}


function _onMethodComplete(result)
{
    _checkResultLabel.innerHTML 
= result ? _validMessage : _invalidMessage;
}

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

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

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

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace 
= "http://www.dflying.net/")]
[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
public class UserRegisterService : System.Web.Services.WebService
{
    
private static string[] m_userData = "Dflying""Admin" };

    [WebMethod]
    
public bool CheckUserName(string userNameCandidate)
    
{
        
foreach (string s in m_userData)
        
{
            
if (s == userNameCandidate) 
                
return false;
        }

        
return true;
    }

}

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

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

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

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

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

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

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

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

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

posted on 2006-05-31 11:00 Dflying Chen 阅读(5462) 评论(13)  编辑 收藏 网摘 所属分类: ASP.NET AJAX (Atlas)

评论:
#1楼 [楼主] 2006-06-08 11:36 | Dflying Chen      
彻底无语
  回复  引用  查看    
#2楼  2006-06-08 18:12 | shalala      
什么人啊,垃圾!太过分了
  回复  引用  查看    
#3楼  2006-06-08 18:37 | Cure      
怎么又有垃圾广告,建议dudu封其IP
  回复  引用  查看    
#4楼 [楼主] 2006-06-09 09:04 | Dflying Chen      
@shalala
@Cure
呵呵,封IP也没什么用的

  回复  引用  查看    
#5楼  2006-06-20 14:17 | Charly      
晕,上面的垃圾全家死光光才好!
  回复  引用  查看    
#6楼 [楼主] 2006-06-21 16:52 | Dflying Chen      
@Charly
我也这么想的…………

  回复  引用  查看    
#7楼  2006-07-03 14:43 | bigdesert [未注册用户]
BS发广告的垃圾!!!!!!!
  回复  引用    
#8楼 [楼主] 2006-07-04 16:33 | Dflying Chen      
@bigdesert
同BS

  回复  引用  查看    
#9楼  2007-01-13 14:07 | FVHMN V [未注册用户]
WO YAOKANPP
  回复  引用    
#10楼 [楼主] 2007-01-29 11:36 | Dflying Chen      
@FVHMN V
??

  回复  引用  查看    
#11楼  2007-04-28 16:31 | FDSF [未注册用户]
[url=http://zuijimo.googlepages.com/YZPD.htm]上海泳装派对[/url]
[url=http://zuijimo.googlepages.com/ZXMX.htm]中戏明星班[/url]
[url=http://zuijimo.googlepages.com/ZGKJ.htm]中国空姐[/url]
[url=http://zuijimo.googlepages.com/DMTF.htm]杨臣刚对骂谢霆锋[/url]
[url=http://zuijimo.googlepages.com/JSMV.htm]日本旧时美女[/url]
[url=http://zuijimo.googlepages.com/QAJJ.htm]求爱经纪人[/url]
[url=http://zuijimo.googlepages.com/TJSY.htm]徐静蕾王朔的同居岁月[/url]
[url=http://zuijimo.googlepages.com/ZGMM.htm]最贵十大名模[/url]
[url=http://zuijimo.googlepages.com/ZJSX.htm]自己看手相[/url]
[url=http://zuijimo.googlepages.com/ZQDX.htm]日本最穷的县[/url]
[url=http://zuijimo.googlepages.com/HJDI.htm]80后经典[/url]
[url=http://zuijimo.googlepages.com/XYGS.htm]校园鬼故事[/url]
[url=http://zuijimo.googlepages.com/ZCBB.htm]中超足球宝贝[/url]
[url=http://zuijimo.googlepages.com/RYDJ.htm]人妖当街[/url]
[url=http://zuijimo.googlepages.com/NCNB.htm]纳粹女兵[/url]
[url=http://zuijimo.googlepages.com/JPWX.htm]解剖外星人[/url]
[url=http://zuijimo.googlepages.com/ZULP.htm]租老婆[/url]
[url=http://zuijimo.googlepages.com/RJTH.htm]日剧天后[/url]
[url=http://zuijimo.googlepages.com/XYBL.htm]校园暴力[/url]
[url=http://zuijimo.googlepages.com/YZSH.htm]死亡之后中阴转生过程[/url]
[url=http://zuijimo.googlepages.com/ZRBB.htm]整容成范冰冰[/url]
[url=http://zuijimo.googlepages.com/ZLJL.htm]林志玲pk刘嘉玲[/url]
[url=http://zuijimo.googlepages.com/SBBJ.htm]上班族保健[/url]
[url=http://zuijimo.googlepages.com/YXBZ.htm]游戏壁纸[/url]
[url=http://zuijimo.googlepages.com/CJMT.htm]超级模特[/url]
[url=http://zuijimo.googlepages.com/XYWB.htm]校园吻别[/url]

  回复  引用    
#12楼  2007-05-25 23:02 | fei fei [未注册用户]
看黄色电影
  回复  引用    
#13楼 [楼主] 2007-05-26 19:11 | Dflying Chen      
@fei fei
??

  回复  引用  查看    

发表评论



姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接: