zoukankan      html  css  js  c++  java
  • 使用CustomValidator类及时验证用户名

    做网站用户注册时,都要验证用户名是否已经被注册,现在最常见的做法是点了提交以后再在服务器端检查,这样给用户带来很大不便,如果用户名已经被注册就需要返回重输用户名和密码,这样带来了不必要的回发过程。以前在阿里巴巴注册时发现阿里巴巴在这点上做得很好,他们就是实时检查的。那么我们如何在 .Net 里面实现在这个功能呢。先看一下简单的思路,就是在客户端 Textbox 引发 onchange 事件时使用 XmlHttpRequest 在后台打开一个网页检查反馈结果。来看看简单实现
    function Init() {
        
    var userName=document.getElementById("UserName");
         userName.onchange
    =function(){
            
    var oBao = new ActiveXObject("Microsoft.XMLHTTP");
             oBao.open(
    "Get","check.aspx?username=" + userName.value,false);
             oBao.send();
            
    var strResult = oBao.responseText;
         }

    }

    window.onload
    =Init;

    在网页上插入一个ID为UserName 的 TextBox 这样检查 ,然后在check.aspx 内检查用户名的使用情况,strResult 就可以知道,这样我们的功能算是完成了,但是这样做的缺点就是不能与验证控制一起验证,这时我们可以使用CustomValidator,因为CustomValidator是允许自己添加脚本进行验证的,我们把上面的脚本改一下,移到CustomValidator 的客户端里面。代码如下:

    function ValidationFunctionName(source, arguments)
    {
        
    var userName =document.getElementById("UserName");
        
    var oBao = new ActiveXObject("Microsoft.XMLHTTP");
         oBao.open(
    "Get","Check.aspx?username=" + userName.value,false);  
         oBao.send();
        
    var strResult = oBao.responseText;

        
    //如果返回 1 就代表可以使用,否则不能通过验证
        if (Number(strResult) == 1)
             arguments.IsValid
    = true;    
        
    else
             arguments.IsValid
    = false;
    }


    在网页上再添加一个 CustomValidator   控件,再设一下要验证的控件ID把 ControlToValidate 设成 UserName,
    主要设置客户端验证方法 ClientValidationFunction 为 ValidationFunctionName,如:<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="UserName" ClientValidationFunction="ValidationFunctionName"
                     ErrorMessage="被注册的用户名"></asp:CustomValidator>,然后在Check.aspx 里面完成检查,在我这里是如果可用就往网页上写 1 否则 写 0 ,注意:在Check.aspx 输出的地方一定要调用         Response.Clear() 和 Response.End() 来保证输出的信息只有 1 或 0,当前你也可以用别的方法输出,我这里为了快速实现使用了这种方法,我是在PageLoad 里面与的,如下
    Response.Clear();
    //检查用户名
    if (CheckUserName())
         Response.Write(
    "1");
    else
          Response.Write(
    "0");
    Response.End();

    好了,终于介绍完了
  • 相关阅读:
    Linux_文件系统、磁盘分区_RHEL7
    Linux_LVM、RAID_RHEL7
    Linux_LVM、RAID_RHEL7
    Linux_系统时间管理
    简单聊聊HDFS RBF第二阶段工作近期的一些进展
    LinkedBlockingQueue和ArrayBlockingQueue之间的比较
    LinkedBlockingQueue和ArrayBlockingQueue之间的比较
    公司如何使用开源软件
    公司如何使用开源软件
    ListenableFuture和CompletableFuture简单小结
  • 原文地址:https://www.cnblogs.com/lds85930/p/1211070.html
Copyright © 2011-2022 走看看